参考https://www.cnblogs.com/IvesHe/p/6108933.html
java.util
Interface Collection<E>
- Type Parameters:
E
- the type of elements in this collection
- All Superinterfaces(超级接口):
- Iterable<E>
- All Known Subinterfaces(已知子接口):
- BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>, TransferQueue<E>
- All Known Implementing Classes(已知实现类):
- AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedDeque, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector
-
java.util
Interface List<E>
- Type Parameters:
E
- the type of elements in this list
- All Superinterfaces:
- Collection<E>, Iterable<E>
- All Known Implementing Classes:
- AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
1.可以允许重复对象;2.可以插入null值;3.有序容器,输出顺序既是插入顺序
- 常见实现类ArrayList(使用索引随便访问),LinkedList(常用语增删元素),Vector
java.util
Interface Set<E>
- Type Parameters:
E
- the type of elements maintained by this set
- All Superinterfaces:
- Collection<E>, Iterable<E>
- All Known Subinterfaces:
- NavigableSet<E>, SortedSet<E>
- All Known Implementing Classes:
- AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
- 1.不允许有重复对象;2.可以插入null,但是只能有一个;3.无序容器,TreeSet 通过Comparator或者Comparable维护了一个排序顺序
- 常见实现类HashSet,LinkedHashSet,TreeSet,只有treeSet是按某种规则排序的有序容器
-
java.util
Interface Map<K,V>
- Type Parameters:
K
- the type of keys maintained by this mapV
- the type of mapped values
- All Known Subinterfaces:
- Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMessageContext, MessageContext, NavigableMap<K,V>, SOAPMessageContext, SortedMap<K,V>
- All Known Implementing Classes:
- AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap
- 1.map不是colleaction的子接口或者实现类,Map是一个接口;2.Map有键值,key不能重复(所以最多只有一个null key)
- Map最常用实现类HashMap,LinkedHashMap,Hashtable,TreeMap
-
2.面试题:什么场景下使用list,set,map呢?
(或者会问为什么这里要用list、或者set、map,这里回答它们的优缺点就可以了)
答:
-
如果你经常会使用索引来对容器中的元素进行访问,那么 List 是你的正确的选择。如果你已经知道索引了的话,那么 List 的实现类比如 ArrayList 可以提供更快速的访问,如果经常添加删除元素的,那么肯定要选择LinkedList。
-
如果你想容器中的元素能够按照它们插入的次序进行有序存储,那么还是 List,因为 List 是一个有序容器,它按照插入顺序进行存储。
-
如果你想保证插入元素的唯一性,也就是你不想有重复值的出现,那么可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。
-
如果你以键和值的形式进行数据存储那么 Map 是你正确的选择。你可以根据你的后续需要从 Hashtable、HashMap、TreeMap 中进行选择。
-