一、什么是集合类
一种特殊的JAVA类,用来存储大批量数据的,
并且提供了很多方法,可以方便的对数据进行增删改查。
元素是以object(所有类的的父类)存储到集合中,
父类能出现的地方子类皆可出出现,
所以集合中可以存放任意数据类型的数据,并且集合的长度随意。
特点:
1)存放任意数据类型的数据
2)变长,容量随数据的改变而改变
二、数组和集合的比较
1)数组是定长的,只能存放同类型数据。
2)集合是变长,可以存放任意数据类型的数据。
三、集合类接口
总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合; 其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合; 而ArrayList和 LinkedList 实现了List接口,HashSet实现了Set接口,这几个都比较常用; HashMap 和HashTable实现了Map接口,并且HashTable是线程安全的,但是HashMap性能更好;
Collection接口:存储一组不唯一、无序的对象(可重复)
List接口:存储一组不唯一、有序(插入顺序)的对象
ArrayList类:
底层是以数组的形式来存放数据的,查改速度快。
LinkedList类:
底层是以链表的形式来存放数据的,增删速度快。
Set接口:存储一组唯一、无序的对象
HashSet类
TreetSet类
Map接口:
Map:双列集合的根接口,用于存储具有键(key)、值(value)映射关系的元素。
HashMap:用于存储键值映射关系,不能出现重复的键key
TreeMap:用来存储键值映射关系,不能出现重复的键key,所有的键按照二叉树的方式排列
四、ArrayList类的应用
任何类都可以创建其对象
方法:
add(object o):在列表的末尾顺序添加元素,索引从0开始
add(index,object):在指定位置处添加元素
size():返回列表中元素的个数
remove(indext):从列表中删除指定位置的元素,下标从0开始
remove(object o):从列表中删除指定对象的元素
get(int index):获取指定位置处的元素,取出的元素是object类型的
使用之前需要进行强制类型转换
contains(object o):判断列表中是否包含某个元素
//1、创建多个小狗对象,都是object类型
Dog ouou=new Dog("欧欧","金毛");
Dog yaya=new Dog("亚亚","二哈");
Dog meimei=new Dog("美美 ","金毛");
Dog feifei = new Dog("菲菲","二哈");
//2、创建ArrayList集合对象,并把多个小狗对象放入其中
//声明父接口,创建子类
List dogs=new ArrayList();
dogs.add(ouou);
dogs.add(yaya);
dogs.add(meimei);
dogs.add(2,feifei);
//3、输出集合中小狗的数量
System.out.println("共计有: "+dogs.size()+"条小狗");
//4、通过遍历集合,显示各条狗的信息get()方法,强制类型转换
for(int i=0;i<dogs.size();i++){
Dog d=(Dog)dogs.get(i);
System.out.println("小狗的名字:"+d.getName()+"\t小狗的类型:"+d.getStrain());
}
//5、删除集合中的第一个小狗和菲菲
dogs.remove(0);
dogs.remove(feifei);
System.out.println("删除后,剩余的小狗:");
for(int i=0;i<dogs.size();i++){
Dog d=(Dog)dogs.get(i);
System.out.println("小狗的名字:"+d.getName()+"\t小狗的类型:"+d.getStrain());
}
//6、判断集合中是否包含指定小狗信息
if(dogs.contains(meimei)){
System.out.println("集合中包含美美");
}else{
System.out.println("集合中不包含美美");
}
五、LinkedList应用
写了很多自己的方法,增删快
LinkedList的特殊方法:
addFirst(object o):在列表的首部添加元素
addLast(object o):在列表的尾部添加元素
getFirst():返回列表中的第一个元素
getLast():返回列表中的最后一个元素
removeFirst:删除列表中的第一个元素
removeLast:删除列表中的最后一个元素
//1、创建多个小狗对象,都是object类型
Dog ouou=new Dog("欧欧","金毛");
Dog yaya=new Dog("亚亚","二哈");
Dog meimei=new Dog("美美 ","金毛");
Dog feifei = new Dog("菲菲","二哈");
//2、创建LinkedList集合对象,并把多个小狗对象放入其中
LinkedList dogs =new LinkedList();
dogs.add(ouou);
dogs.add(yaya);
//LinkedList独有的方法
dogs.addFirst(meimei);
dogs.addLast(feifei);
//3、查看集合中第一个小狗的昵称
Dog dogFirst=(Dog)dogs.getFirst();
System.out.println("第一条小狗的昵称: "+dogFirst.getName());
//4、查看最后一条小狗的昵称
Dog dogLast=(Dog)dogs.getLast();
System.out.println("最后一条小狗的昵称: "+dogLast.getName());
//5、删除第一个和最后一个小狗
dogs.removeFirst();
dogs.removeLast();
//6、显示删除后,剩余小狗的信息
for(int i=0;i<dogs.size();i++){
Dog d=(Dog)dogs.get(i);
System.out.println(d.getName()+"\t"+d.getStrain());
}
六、Set的应用
一般用HashSet实现类,存放唯一、无序的数据,
遍历时必须用迭代器Iterator。
Collection接口的iterator()方法返回一个Iterator对象,
然后通过Iterator接口的两个方法实现遍历:
1)hasNext():判断是否有元素
2)next():取出元素
Set set = new HashSet();
set.add("one");
set.add("two");
set.add("three");
set.add("four");
//set存放唯一、无序的数据
set.add("one");//并没有被插入进去
System.out.println(set.size());
//迭代器遍历Set集合
Iterator it =set.iterator();
while(it.hasNext()){//找到第一个元素,判断是否有元素
System.out.println(it.next());//通过next方法,取出该元素
}
七、Map接口应用
键值对存储数据
键:key
值:value
Map接口以键(key)值(value)对的方式存储数据;
最常用的实现类是HashMap
put(key,value):添加数据
get(key):通过键来取相应的值
remove(key):删除整个键值对
size():获取集合的长度
keySet():返回键的集合
values():返回值得集合
//1、使用HashMap存放多个国家英文简称和中文全品的键值对
//声明父接口,创建实现类
Map countries = new HashMap();
countries.put("CN", "中华人民共和国");
countries.put("RU", "俄罗斯联邦");
countries.put("FR", "法兰西共和国");
countries.put("US", "美利坚合众国");
//2、显示CN对应的国家全拼,get()方法的参数是key
String country = (String)countries.get("CN");
System.out.println(country);
//3、显示集合中元素的个数
System.out.println("共有数据的个数为: "+countries.size());
//4、判断Map中是否包含"FR"键,传一个键进去,返回true或false
System.out.println("Map中包含FR键吗:"+countries.containsKey("FR"));
//整个删除
countries.remove("FR");
System.out.println("Map中包含FR键吗:"+countries.containsKey("FR"));
//6、分别显示键集、值集、键值对集合
System.out.println(countries.keySet());
System.out.println(countries.values());
System.out.println(countries);
八、泛型
接口、类、迭代器后面都可以加泛型。
List dogs=new ArrayList ();
LinkedList dogs =new LinkedList ();
Iterator it =set.iterator ();
规定集合里面存的都是小狗类型
后面取值得时候,不用再强制类型转换了。