一、java集合概述
1、java集合类存放于java.util包中,是一个用来存放对象的容器。
→集合只能存放对象。
→集合存放的是多个对象的引用,对象本身还是放在堆内存中
→集合可以存放不同类型,不限数量的数据类型
2、java集合可分为Set、List、和Map三大体系
Set:无序,不可重复的集合
List:有序,可重复的集合
Map:具有映射关系的集合
在JDK5之后,增加了泛型,java集合可以记住容器中对象的数据类型
二、HashSet:HashSet是Set接口的典型实现,按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
1、HashSet具有以下特点:
→不能保证元素的排列顺序;
→不可重复;
→HashSet不是线程安全的;
→集合元素可以使null
2、当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,
然后根据hashCode值决定返回对象在HashSet中的存储位置。
三、TreeSet:TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。
TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序
Person p1=new Person("张三",25); Person p2=new Person("李四",23); Set<Person> s=new TreeSet<Person>(new Person()); s.add(p1); s.add(p2); //System.out.println(s); for(Person p:s){ System.out.println(p.name+" "+p.age); } /** * 声明一个Person类 * 包含变量name和age * @author 小虞哥哥 * */ class Person implements Comparator<Person>{ //把person对象存到TreeSet中并按照年龄排序 int age; String name; public Person(){} public Person(String name,int age){ this.name=name; this.age=age; } @Override public int compare(Person o1, Person o2) { //按照年龄正序排列 if(o1.age>o2.age){ return 1; }else if(o1.age<o2.age){ return -1; }else{ return 0; } } }
四、List与ArrayList
1、List代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
2、List允许使用重复元素,可以通过索引来访问指定位置的集合元素。
3、List默认按元素的添加顺序设置元素的索引
4、List集合里添加了一些根据索引来操作集合元素的方法
注:ArrayList和Vector是List接口的两个典型实现,区别如下:
→Vector是一个古老的集合,通常建议使用ArrayList;
→ArrayList是线程不安全的,而Vector是线程安全的;
→即使为保证List集合线程安全,也不推荐使用Vector
五、Map:用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组用于保存Map里的Value
1、Map中的Key和Value都可以是任何引用类型的数据
2、Map中的Key不允许重复
3、Key和Value之间存在单向一对一关系,即通过指定的Key总能找到唯一的,确定的Value
六、TreeMap:存储Key-Value对时,需要根据key对key-value对进行排序。TreeMap可以使所有的key-value对处于有序状态
七、操作集合的工具类:Collections:是一个操作Set、List和Map等集合的工具类
1、排序操作:
→reverse(List):反转List中元素的顺序
→shuffle(List):对List集合元素进行随机排序
→sort(List):根据元素的自然顺序对指定List集合元素按升序排序
→sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
→swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
2、查找、替换
→Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
→Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
→同理可得min
→int frequency(Collection,Object):返回指定集合中指定元素的出现次数
→boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换旧值
八、同步控制:Collection类中提供了多个synchronizedXxx()方法,该方法可将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程安全问题