Java集合概述
Java集合类存放于java.util包中,是一个用来存放对象的容器
① 集合只能存放对象。比如你存一个int型数据1放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本类型都有对应的引用类型
② 集合存放的是多个对象的引用,对象本身还是放在堆内存中
③ 集合可以存放不同类型、不限数量的数据类型
Java集合可分为Set、List和Map三种大体系
Set:无序、不可重复的集合
List:有序,可重复的集合
Map:具有映射关系的集合
HashSet HashSet是Set接口的典型实现,大多数时候使用Set集合时都是用这个实现类。我们大多数时候说的set集合指的都是HashSet HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能 HashSet具有以下特点: 不能保证元素的排列顺序 不可重复 HashSet不是线程安全的 集合元素可以是null 当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置 如果两个元素的equals()方法返回true,但他们的hashCode()返回值不相等,HashSet将会把他们存储在不同的位置,但依然可以添加成功 实现 继承 HashSet——————>set接口——————>Collection接口 TreeSet TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态 TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序 实现 继承 继承 继承 TreeSet类——————>NavigableSet接口————>SortedSet接口————>Set接口————>Collection接口 自然排序 排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按生序排列 如果this > obj,返回正数 1 如果this < obj,返回负数 -1 如果this = obj,返回 0 ,则认为这两个对象相等 必须放入同样类的额对象(默认会进行排序)否则可能发生类型转换异常,我们可以使用泛型来进行限制 ArrayList List代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引 List允许使用重复元素,可以通过索引来访问指定位置的集合元素 List默认按元素的添加顺序设置元素的索引 List集合里添加了一些根据索引来操作集合元素的方法 实现 继承 ArrayList类————>List接口————>Collection接口 ArrayList和Vector是List接口的两个典型实现 区别: Vector是一个古老的集合,通常建议使用ArrayList ArrayList是线程不安全的,而Vector是线程安全的 即使为保证List集合线程安全,也不推荐使用Vector Map Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组用于保存Map里的Value Map中的key和value都可以是任何引用类型的数据 Map中的Key不允许重复,即同一个Map对象的任何两个Key通过equals方法比较中返回false Key和Value之间存在单向一对一关系,即通过指定的Key总能找到唯一的、确定的Value HashMap & Hashtable HashMap 和 Hashtable是Map接口的两个典型实现类 区别: Hashtable是一个古老的Map实现类,不建议使用 Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的 Hashtable不允许使用null作为key和value,而HashMap可以 与HashSet集合不能保证元素的顺序一样,Hashtable、HashMap也不能保证其中key-value对的顺序 Hashtable、HashMap判断两个key相等的标准是:两个key通过equals方法返回true,hashCode值也相等 Hasht相等的标准是:两个value通过equalHashMap判断两个values方法返回true TreeMap TreeMap存储Key-Value对时,需要根据key-value对进行排序。TreeMap可以保证所有的key-value对处于有序状态 TreeMap的key的排序: 自然排序:TreeMap的所有的key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则将会抛出ClassCastException 定制排序(了解):创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。此时不需要Map的key实现Comparable接口 一般使用map集合,不会使用过于复杂对象做key 操作集合的工具类:Collections Collections是一个操作Set、List和Map等集合的工具类 Collections中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法 排序操作: reverse(List):翻转List中元素的顺序 shuffle(List):对List集合元素进行随机排序 sort(List):根据元素的自然顺序对指定List集合元素按升序排序 sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序 swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换