- HashSet做等值查询效率高,TreeSet做范围查询效率高.
- 因为:Map接口并没有继承于Collection接口,也没有继承于Iterable接口,所以不能直接对Map使用for-each操作.
-
Map的常用实现类:
HashMap: 采用哈希表算法, 此时Map中的key不会记录添加的先后顺序,key也不允许重复.
key判断重复的标准是: key1和key2是否equals为true,并且hashCode相等.
TreeMap: 采用红黑树算法,此时Map中的key会按照自然顺序或定制排序进行排序,key也不允许重复.
key判断重复的标准是: compareTo/compare的返回值是否为0.
LinkedHashMap: 采用链表和哈希表算法,此时Map中的key会保证先后添加的顺序,key不允许重复.
key判断重复的标准和HashMap中的key的标准相同.
Hashtable: 采用哈希表算法,是HashMap的前身(类似于Vector是ArrayList的前身).
所有的方法都使用synchronized修饰符,线程安全的,但是性能相对HashMap较低.
Properties: Hashtable的子类,此时要求key和value都是String类型.
用来加载资源文件(properties文件).
HashMap和TreeMap以及LinkedHashMap都是线程不安全的,但是性能较高:
解决方案: Map m = Collections.synchronizedMap(Map对象);
Hashtable类实现线程安全的,但是性能较低.
哈希表算法:做等值查询最快.
TreeMap:做范围查询最快-->应用到索引上. -
判断两个对象是否相等的规则:
1):equals比较为true.
2):hashCode值相同. -
集合操作的工具类:
1):Arrays类:
2):Collections类.
在Collection接口中有一个方法叫toArray把集合转换为Object数组.
把集合转换为数组: Object[] arr = 集合对象.toArray();
数组也可以转换为集合(List集合):
public static <T> List<T> asList(T... a) 等价于public static <T> List<T> asList(T[] a).
通过Arrays.asList方法得到的List对象的长度是固定的,不能增,也不能减.
asList方法返回的不是java.util.ArrayList而是Arrays类中的内部类对象. -
HashSet/ArrayList/HashMap都是线程不安全的,在多线程环境下不安全.
在Collections类中有获取线程安全的集合方法:
List list = Collections.synchronizedList(new ArrayList());
synchronized(list) {
TODO
}
day26—集合3
最新推荐文章于 2020-02-17 13:09:13 发布