Java集合部分的内容,在日常开发中我们不可缺少的,也是面试题中必然会出现的。以日常使用为基础,然后拓展一部分面试可能会出现的问题的角度来了解和学习集合部分的内容。
图片内容引自CSDN https://blog.csdn.net/u010887744/article/details/50575735 ,由图片内容进行各类集合的深入了解。
1. 集合中我们需要注意的几点
Java集合是用来存放对象的容器。
1. 集合只能存放对象,对于存放基础数据类型,其实是将其自动转换为他的引用类型,进行保存;(int 和 Integer)
2. 集合存放的是多个对象的引用,对象本身还是放在堆内存中;
2. 两大类Collection 和 Map
Java集合可分为两大类 Collection 和 Map,既然分为两类接口,必然有他们的不同。
Conllection:元素是单列形式的,实现了Iterable接口;包含两个子接口 List 和 Set
Map:元素以键值对形式存在,key / value ,严格来说Map并不是集合,而是两个集合之间的映射关系,Map并没有实现Conllection接口,也没有实现Iterable接口,所以不能进行 for-each遍历。
3. Collection接口,List接口和Set接口的父接口
我们讲的List 、Set的有序无序,是指是否按照添加的顺序进行存储对象。而TreeSet和TreeMap的有序,是通过继承SortedSet和SortedMap来实现的排序(自然排序),这是两个概念要区分开。
List (有序、可重复)
List接口的实现类,都可以使用for循环进行遍历,在指定位置添加元素,替换元素等操作。
1)List arrayList = new ArrayList();
由数组实现,查询速度快,增、删速度慢;线程不安全,效率高2)List linkedList = new LinkedList();
由链表实现,查询速度慢,增、删速度快;线程不安全,效率高3)List vector = new Vector();
由数组实现,查询速度快,增、删速度慢;线程安全,效率低(淘汰)
Set(无序、不可重复)
1)Set hashSet = new HashSet();
不能保证元素的顺序,不可重复;线程不安全;集合元素可以为NULL;2)Set linkedHashSet = new LinkedHashSet();
有序(基于LinkedHashMap实现),不可重复;线程不安全;3)Set treeSet = new TreeSet();
有序(实现SortedSet接口),不可重复;线程不安全;底层基于红黑树算法有利于范围查询;必须放同类对象,否则排序时会出现类型转换异常( ClassCastExecption)。
4. Map接口
1)Map hashMap = new HashMap();
无序,key不可重复,value可重复,允许null的键或值;线程不安全;效率高;2)Map linkedHashMap = new LinkedHashMap();
有序(链表和哈希表算法),key不可重复,value可重复,允许null的键或值;线程不安全;3)Map treeMap = new TreeMap();
有序(key就是TreeSet),key不可重复,value可重复;线程不安全;4)Map weakHashMap = new WeakHashMap();
key只存对实际对象的引用;5)Map properties = new Properties();
要求key和value都是String类型,一般用来加载配置文件;6)Map enumMap = new EnumMap(DayOfWeek.class);
key必须是单个枚举类的枚举值;DayOfWeek 为枚举类;7)Map concurrentHashMap = new ConcurrentHashMap();
结合HashMap 和 HashTable的优点,在保证线程安全的前提下大大提高了效率;8)Map identityHashMap = new IdentityHashMap();
与HashMap基本相似,区别在于当两个key完全相等才认为其相等;(key重复)
5. Collections 操作集合的工具类
集合中一部分是可以保证线程安全的,那如果我们使用类似ArrayList时,怎么能保证其安全性呢?
使用Collections.synchronizedXxx() 方法对指定集合进行保证,从而解决多线程并发访问集合时的线程安全问题。
Map hashMap = Collections.synchronizedMap(new HashMap());
List arrayList = Collections.synchronizedList(new ArrayList<>());
Set hashSet = Collections.synchronizedSet(new HashSet<>());
网友评论