HashMap和Hashtable区别
- HashMap的key和value都可以为空值(null),初始化16,初始化容量建议2的倍数,加载因子0.75,扩容为加倍
- Hashtable的键和值都不可以为null,初始化11,默认加载因子0.75,扩容为加倍再加一
- Hashtable线程安全,HashMap不是线程安全
- Hashtable过时了,不要再用,可用ConcurrentHashMap
属性类Properties介绍(学IO时再具体学习)
- 一个Map集合,继承自Hashtable,key和value都得是String类型
- 存 setProperty(String key, String value)
- 取 getProperty(String key)
TreeSet(底层是TreeMap,TreeMap底层是二叉树)无序不可重复,但可排序
-
//源码构造方法 public TreeSet() { this(new TreeMap<E,Object>()); }
-
对自定义的类型无法排序,若想要排序需要实现Comparable接口,重写compareTo(T o)方法
Comparable<? super K> k = (Comparable<? super K>) key; do { parent = t; cmp = k.compareTo(t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else return t.setValue(value);//相等就会被覆盖,所以是不可重复的 } while (t != null);
-
TreeSet集合中的元素应当实现compareTo方法,equals可以不写
//写一个Student类,用age来排序,这样是升序的,应该是返回正数就放在后面 @Override public int compareTo(Student o) { if (this.age > o.age) { return 1; } else if (this.age < o.age) { return -1; } else { return 0; } //也可以写成 return this.age - o.age; }
-
也可以直接在构造方法传比较器,这样对象就不需要实现Comparable(java.lang)接口,比较器Comparator(java.util)
如果比较规则单一不怎么变就用comparable,否则就用Comparator
public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator; } //匿名内部类 TreeSet<Student> set1 = new TreeSet<>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.age - o2.age; } });
-
TreeMap采用中序遍历,是自平衡二叉树
Collections集合工具类
-
public static <T> List<T> synchronizedList(List<T> list) //变成线程安全的
-
sort(List list)排序,这个方法存储的对象应当实现Comparable接口,也有对应的用Comparator