集合框架
一、集合框架的分类:
1 Collection(单列集合)
1 List --> 有序,可重复
1 ArrayList
底层结构数组,查询块,增删慢。
线程不安全,效率高。
2 LinkedList
底层结构链表,查询慢,增删块。
线程不安全,效率高。
2 Set --> 无序,不可重复(唯一)
1 HashSet
底层结构哈希表。
哈希表依赖两个方法:一个是HashCode(),一个是equals()。
首先执行HashCode(),判断值是否相同,
是:继续执行equals(),判断返回值,
true:说明元素已经存在。
false:直接添加到集合中。
否:直接添加到集合中。
最终:自动生成HashCode()和equals()即可。
LinkedHashSet:
底层数据结构由链表和哈希表组成。链表保证元素有序。哈希表保证元素唯一。
2 TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证数据唯一:
根据比较的返回值是否是0来决定。
如何保证数据有序:
两种方式:
自然排序(元素具备比较性):
让元素所属的类实现Comparable接口。
比较器排序(集合具备比较性):
让集合接收一个Comparator的实现类对象。
2 Map(双列集合)
Map集合数据结构仅仅针对键有效,与值无关。
1 HashMap:
底层结构哈希表。线程不安全,效率高。
哈希表依赖两个方法:一个是HashCode(),一个是equals()。
首先执行HashCode(),判断值是否相同,
是:继续执行equals(),判断返回值,
true:说明元素已经存在。
false:直接添加到集合中。
否:直接添加到集合中。
最终:自动生成HashCode()和equals()即可。
LinkedHashMap:
底层数据结构由链表和哈希表组成。链表保证元素有序。哈希表保证元素唯一。
2 HashTable:
底层结构哈希表。线程安全,效率低。
哈希表依赖两个方法:一个是HashCode(),一个是equals()。
首先执行HashCode(),判断值是否相同,
是:继续执行equals(),判断返回值,
true:说明元素已经存在。
false:直接添加到集合中。
否:直接添加到集合中。
最终:自动生成HashCode()和equals()即可。
3 TreeMap:
底层数据结构是红黑树。(是一种自平衡的二叉树)
如何保证数据唯一:
根据比较的返回值是否是0来决定。
如何保证数据有序:
两种方式:
自然排序(元素具备比较性):
让元素所属的类实现Comparable接口。
比较器排序(集合具备比较性):
让集合接收一个Comparator的实现类对象。
二、集合框架的使用选择:
对象是否是键值对:
是:Map
否:是否需要排序:
是:Set
否:List,查询多还是增删多:
查询多:ArrayList
增删多:LinkedList
总结:其实还是根据实际情况和集合的特点来进行选择。
三、Collections工具类:
Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。
常用的方法有:
static <T> boolean addAll(Collection<? super T> c, T... elements) //将所有指定的元素添加到指定的集合中。 static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) //使用二进制搜索算法搜索指定对象的指定列表。 static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) //使用二进制搜索算法搜索指定对象的指定列表。 static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, 类<E> type) //返回一个动态类型安全的查看指定的排序设置。 static <T> void copy(List<? super T> dest, List<? extends T> src) //将所有的元素从一个列表复制到另一个列表中。 static <T> Set<T> emptySet() //返回一个空集(不可变)。 static <T> Enumeration<T> enumeration(Collection<T> c) //返回指定集合的枚举数。 static <T> void fill(List<? super T> list, T obj) //用指定元素替换指定列表的所有元素。 static int indexOfSubList(List<?> source, List<?> target) //返回指定的源列表中指定的目标列表的第一个发生的起始位置,或-如果没有这样的发生,则- 1。 static int lastIndexOfSubList(List<?> source, List<?> target)//返回指定的源列表中指定的目标列表的最后一个发生的起始位置,或-如果没有这样的发生,则- 1。 static <T> ArrayList<T> list(Enumeration<T> e) //返回一个数组列表,该列表包含在返回的顺序中由枚举返回的元素的元素。 static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) //返回最大元素的集合,根据其元素的自然排序。 static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp) //返回给定集合的最大元素,根据指定的比较器诱导的顺序。 static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) //返回最小的元素的集合,根据其元素的自然排序。 static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) //返回给定集合的最小元素,根据指定的比较器诱导的顺序。 static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) //将列表中的某一特定值的所有出现替换为另一个。 static void reverse(List<?> list) //反转指定列表中元素的顺序。 static <T> Comparator<T> reverseOrder() //返回一个比较器,对一系列的实施 Comparable界面对象的自然顺序相反。 static <T> Comparator<T> reverseOrder(Comparator<T> cmp) //返回一个对指定比较器的反向排序的比较器。 static void rotate(List<?> list, int distance) //按指定的距离旋转指定列表中的元素。 static <T> Set<T> singleton(T o) //返回只包含指定对象的不可改变的集合。 static <T> List<T> singletonList(T o) //返回只包含指定对象的不可改变的列表。 static <K,V> Map<K,V> singletonMap(K key, V value) //返回一个不可改变的Map,只将指定的指定的键映射到指定的值。 static <T extends Comparable<? super T>> void sort(List<T> list) //指定列表为升序排序,根据其元素的 natural ordering。 static <T> void sort(List<T> list, Comparator<? super T> c) //根据指定的比较器指定的顺序对指定的列表进行排序。 static void swap(List<?> list, int i, int j) //在指定的列表中的指定位置上交换元素。 static <T> Collection<T> synchronizedCollection(Collection<T> c) //返回由指定集合支持的同步(线程安全)集合。 static <T> List<T> synchronizedList(List<T> list) //返回由指定列表支持的同步(线程安全)列表。 static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) //返回由指定的Map支持的同步(线程安全)Map。 static <K,V> NavigableMap<K,V> synchronizedNavigableMap(NavigableMap<K,V> m) //返回指定的导航Map支持的同步(线程安全)导航Map。 static <T> NavigableSet<T> synchronizedNavigableSet(NavigableSet<T> s) //返回由指定的导航集支持的同步(线程安全)导航集。 static <T> Set<T> synchronizedSet(Set<T> s) //返回一个由指定集合支持的同步(线程安全)集。 static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) //返回一个由指定的排序映射支持的同步(线程安全)排序的Map。 static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) //返回一个由指定的排序集支持的同步(线程安全)排序集。