一、Collections集合框架(API文档 java.util 下面) 最重要的两个子接口:
-----List接口 : (List集合特点:1.元素可以重复2.有序的)
有三个重要的实现类 ArrayList,LinkedList,Vector(了解) List集合代替了Vector
ArrayList集合(数组集合)的特点:底层数据结构是数组,是有序的(存储的顺序和取出顺序是一致的),增删速度慢,查询速度快
LinkList集合(链表集合)的特点:底层数据结构是链表,是有序的(存储的顺序和取出顺序是一致的),增删速度快,查询速度慢(异步的)
-----Set接口 : (Set集合特点:1.元素不可以重复2.无序的)
最重要的实现类 HashSet,TreeSet(了解)
什么是集合框架?
是个容器,用来存储数据的,是用来存储类类型的数据(对象),只能存储对象(Object)。
可以用数组存储对象,为什么又出现集合框架呢?
原因:数组长度是不可以改变的,存在局限性,但是集合框架的长度是可变的。
ArrayList(异步的)的用法
初始化一个长度为10的集合,当超过这个长度的时候会以原先50%去增加新的空间。
1.添加数据+插入数据
add(); addAll();
eg:ArrayList l1=new ArrayList();
List l2=new ArrayList();//多态的表现形式
//add方法
l1.add(1);
l1.add(2.0);
l1.add("邓超");
l1.add("孙俪");
l1.add("张三");
System.out.println(l1.toString());
l1.add(3, "赵六");
System.out.println(l1.toString());
//addAll方法
List a=new ArrayList();
a.add("邓超");
a.add("孙俪");
List b=new ArrayList();
b.add("张三");
b.add("李四");
//插入方法
if (b.addAll(1,a)) //a里面的元素放到b里面
System.out.println("插入成功");
else
System.out.println("插入失败");
System.out.println("b="+b);
System.out.println("a="+a);
结果为:[1, 2.0, 邓超, 孙俪, 张三]
[1, 2.0, 邓超, 赵六, 孙俪, 张三]
插入成功
b=[张三, 邓超, 孙俪, 李四]
a=[邓超, 孙俪]
2.删除数据
clear();
remove(int x) ;
remove(Object obj);
Object obj = list3.remove(2);//将list3的第二个元素移除并返回给obj
eg:List l3=new ArrayList();
l3.add(1);
l3.add(2);
l3.add(3);
l3.add("a");
l3.add("b");
l3.add("c");
syso(l3); //[1, 2, 3, a, b, c]
// l3.clear();//清空集合里面的数据
l3.remove(2);//移除3
syso(l3);//[1, 2, a, b, c]
Object obj=l3.remove(2);//将索引值为2的(对象)移除,并把这个对象(obj)返回
syso(obj); //a
syso("原来的集合还有:"+l3);//[1, 2, b, c]
boolean flag=l3.remove("c");
if (flag) {
syso("移除成功");
} else {
syso("移除失败");
}
syso("原来的集合还有:"+l3);//[1, 2, b]
List listA=new ArrayList();
listA.add("张三");
listA.add("李四");
listA.add("王五");
listA.add("赵六");
List listB=new ArrayList();
listB.add("张三");
listB.add("李四");
listB.add("田七");
listB.add("周八");
if (listA.removeAll(listB)) {
syso("移除成功");
} else {
syso("移除失败");
} //已成功
syso("A集合"+listA); //A集合[王五, 赵六]
syso("B集合"+listB); //B集合[张三, 李四, 田七, 周八]
3.修改数据
set(index, element);将index位置上的元素替换为element
eg:List l5=new ArrayList();
l5.add("张三");
l5.add("李四");
l5.add("王五");
l5.add("赵六");
syso(l5); //张三, 李四, 王五, 赵六]
l5.set(0, "孙久");
syso(l5); //[孙久, 李四, 王五, 赵六]
4.查找数据
Object get(int index);//根据集合里面的index索引值查找相应元素
index(Object obj);//查询obj在集合中第一次出现的位置(从左向右)
lastIndexOf(Object obj);//查询obj在集合中第一次出现的位置(从右向左),查不到返回-1
size();//查找集合中元素的个数
eg:List l6=new ArrayList();
l6.add("张三");
l6.add("张三");
l6.add("李四");
l6.add("王五");
l6.add("赵六");
syso(l6.size());//集合元素的个数5
syso(l6.indexOf("田七"));//-1 没有这个元素
syso(l6.indexOf("张三"));//0
syso(l6.lastIndexOf("张三"));//1
Object ob=l6.get(4);
syso(ob);//赵六
5.判断
boolean contanins(Obj obj);//判断是否有obj元素
boolean isEmpty();//判断集合是否为空
eg:List l7 = new ArrayList();
l7.add("张三");
l7.add("张三");
l7.add("李四");
l7.add("王五");
l7.add("赵六");
syso(l7.isEmpty());// false
syso(l7.contains("孙九"));// false
6.转换
Object[] obj .toArray();//将一个集合转换为相应的数组
eg:List l8=new ArrayList();
l8.add(1);
l8.add(2);
l8.add(new Object());
l8.add("王五");
l8.add("赵六");
Object[] o2=l8.toArray();
for (Object o:o2) {
System.out.print(o+"\t");
}
结果为:1 2 java.lang.Object@3ec44cfb 王五 赵六
LinkList集合(链表集合)的特点:底层数据结构是链表,是有序的(存储的顺序和取出顺序是一致的),增删速度快,查询速度慢(异步的)
1.增加数据
addFirst();===替换为===》offerFirst();//将元素添加到集合开头
addLast();===替换为===》offerLast();//将元素添加到集合结尾
2.删除数据
clear();//清空集合
removeFirst();===替换为===》pollFirst();//移除集合当中第一个元素,并返回
removeLast();===替换为===》pollLast();//移除集合当中最后一个元素,并返回
3.修改数据
set(index, element);将index位置上的元素替换为element
4.查找数据
Object get(int index);//根据集合里面的index索引值查找相应元素
Object getFirst(int index);===替换为===》peekFirst();//得到第一个元素
Object getLast(int index);===替换为===》peekLast();//得到最后一个元素
Vector(同步的)的用法
初始化一个长度为10的集合,当超过这个长度的时候会以原先100%去增加新的空间。
结论:List集合判断里面元素是否重复是根据equals判断
除了字符可以用equals方法判断之外,自定义对象也可以用equals方法判断
自定义对象怎么用equals方法判断呢?
1.两个人,姓名一样,年龄一样,就认定为同一人
要求:集合里面只能存储一个人 |
|