标签:速度慢 定义 tac add 插入数据 数据 rgs 元素 static
Collection、Map:
Collection:
Map:键值映射集合。
Collection是java有序集合中最根本的接口定义,Collections是java有序集合的工具类。
List:有序集合,元素可重复。
Set:元素不能重复,LinkedList按照元素插入数据排序,SortedSet可排序,HashSet无序。
Map:键值对集合,key无序且唯一,value不要求有序且允许重复。
HashMap基于数组和链表,TreeMap基于红黑树。
因HashMap不支持排序,而TreeMap默认按照key升序排序的,所以在没有排序要求的情况下使用HashMap会有更好的性能。
1.8以前HashMap使用的是数组+链表的方式实现,首先它会拿到key值计算hash值,确认hash值后再将数据放到对应的槽中。
既然是计算hash值来找槽的话,那必然就会有hash冲突,java中解决hash冲突是采用链表的方式,也就是说具有向hash值key会放到同一个链表中。
而当HashMap数据过大的话势必会产生链表长度多大,导致访问数据过慢。
所以在1.8+的HashMap会在链表长度超过8的时候,将链表转为红黑树。
HashSet 是基于 HashMap 实现的,查询速度特别快。
实现:ArrayList基于动态数组;LinkedList基于链表。
随机访问:ArrayList随机访问速度快(下标访问);LinkedList随机访问速度慢(链表需要遍历全表)。
插入、删除数据:ArrayList插入删除会移动数组速度慢;LinkedList只需改变前后链表的引用速度快。
array to list:Arrays.asList();
list to array:List.toArray();
相同点:
区别:
Array是数组,ArrayList是Array的扩展,实现了动态扩容。
remote未找到元素会抛出异常,poll未找到只会返回null。
用于顺序访问集合对象的元素,无需知道集合对象的底层实现。
优点:Iterator 是可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。
缺点:缺点是增加新的集合类需要对应增加新的迭代器类,迭代器类与集合类成对增加。
使用Collections.unmodifiableList()方法。
public class TestCollectionUnmodify { static List<String> list = new ArrayList<String>(); static Set<String> set = new HashSet<String>(); static Map<String, String> map = new HashMap<String, String>(); static { list.add("1"); list.add("2"); list.add("3"); set.add("1"); set.add("2"); set.add("3"); map.put("1", "1"); map.put("2", "2"); map.put("3", "3"); } public static void main(String[] args) { list = Collections.unmodifiableList(list); set = Collections.unmodifiableSet(set); map = Collections.unmodifiableMap(map); listModify(); setModify(); mapModify(); } public static void listModify() { list.add("4"); } public static void setModify() { set.add("4"); } public static void mapModify() { map.put("3", "4"); } }
标签:速度慢 定义 tac add 插入数据 数据 rgs 元素 static
原文地址:https://www.cnblogs.com/bzfsdr/p/12082148.html