Java集合==Day1
- 集合可以储存多个数据。无需定义长度,集合会动态增加或减少长度,只能储存引用类型数据
- 数组也可以储存多个同种数据,需要定义长度,可以储存引用类型和基本数据类型两种
数量固定用后者,反之前者
1.1Collecion接口
Collection主要是List、Set Queue接口的父接口,所以他的方法在子接口中都能调用
常用方法:添加对象、删除对象、清空集合、判断集合是否为空
特点:元素可重复、无序
常用方法
public class Demo2 {
public static void main(String[] args) {
Collection cc = new ArrayList();//向上转型,此时能调用父类子类共有方法,但是ArrayList继承了该接口,所以父类的方法全部可以调用
Collection cc2 = new ArrayList();
Collection cc3 = new ArrayList();
//1.add(E e)
//cc2.add("cc2的数据");
cc2.add(66);
cc.add("==1==Data1");
cc.add("==2=="+9999);
cc.add("==3=="+true);
cc.addAll(cc2);//添加另一个集合到一个集合中
System.out.println(cc.add(66));//add(E e)的有返回值且是布尔类型
//2 contains(E e)
System.out.println(cc.contains(66));
//3 containsAll(Collection<?>)
System.out.println("======containsAll Test====================================");
System.out.println(cc2.containsAll(cc));
System.out.println("======containsAll Test====================================");
System.out.println(cc.containsAll(cc2));
//4 equals(E e)
System.out.println(cc2.equals(66));//false
System.out.println(cc.equals(9999));//false
//5 equals方法只能在子类有序存储中实现
ArrayList aa = new ArrayList();
aa.add(666);
System.out.println(aa.get(0).equals(666));//输出为true
//6 hasCode()isEmpty()
//遍历=====iterator 和foreach(){}
//1.foreach
System.out.println("======foreach ====================================");
for (Object traverse:cc) {
System.out.println("遍历cc:"+traverse);
}
System.out.println("====== 7 iterator ====================================");
Iterator i1 = cc.iterator();
while(i1.hasNext()){
System.out.println("iterator traverse:"+i1.next());
}
//parallelStrean()
//8 remove(E e) 9 removeAll( C c) 返回值布尔类型
cc.remove(66);
//10 size()
System.out.println("size==="+cc.size());
//11.clear()
cc.clear();
}
}
其他
iterator工作原理
- 判断游标后面是否有元素,有就返回此元素,并将位置移动到下一个位置之前
1.2List集合
有序集合(能通过下标访问数据) 可重复存放元素 每个元素都有对应的索引
超越Collection接口的方法:iterator add remove equals hasCode
LIst有一个特殊迭代器 ListIterator
常用方法
public class ListDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
//List继承Collection接口因此其超类的方法都具有,所以此处只实现List接口特有的方法
//1.add(int index,E e)
list.add(0,"==1==:Data1");
list.add(1,"==2==:Data2");
list.add(2,"==3==:Data3");
list.add(3,"==4==:Data4");
list.add(4,8888);
//2. addAll(int index,E e)
//3. get(int index)
System.out.println(list.get(1));//Data2
//4. indexOf(E e)
System.out.println("======== indexOf ==============================");
System.out.println("第一次出现该数据的索引:"+list.indexOf("Data2"));//若无该数据则返回-1
System.out.println("第一次出现8888该数据的索引:"+list.indexOf(8888));
//5. lastIndexOf(E e)
//遍历查看另一个代码块
//6 remove( E e) remove(int index)
list.remove(0);
//7 set(int index , E e)取代index位置上的元素为e
list.set(0,6666);
System.out.println(list);
}
}
List遍历
-
for循环
-
foreach
-
iterator
-
listIterator(特有)
public class ListTraverse {
public static void main(String[] args) {
List list2 = new ArrayList();
list2.add(0);
list2.add(1);
list2.add(2);
list2.add(3);
list2.add(4);
list2.add(5);
list2.add(6);
System.out.println("========for循环 ==============================");
for (int a = 0;a<list2.size();a++){
System.out.println(list2.get(a));
}
System.out.println("======== ==============================");
System.out.println("======== foreach ==============================");
for (Object traverse:list2
) {
System.out.println("ListTraverse:"+traverse);
}
System.out.println("======== ==============================");
System.out.println("========iterator ==============================");
Iterator iterator = list2.iterator();
while (iterator.hasNext()){
System.out.println("ListTraverse:"+iterator.next());
}
System.out.println("======== ==============================");
System.out.println("========listIterator ==============================");
ListIterator listIterator = list2.listIterator();
while (listIterator.hasNext()){
System.out.println("正向输出:"+listIterator.next());
}
System.out.println("======== listIterator正向输出后的反向输出 ==============================");
//hasPrevious 是将游标从右到左
while (listIterator.hasPrevious()){
System.out.println("反向输出LL:"+listIterator.previous());
//感兴趣的可以看看previousIndex()
}
}
}
1.3ArrayList
ArrayList extends List &List extends Collection 所以Collection和List接口所拥有的方法ArrayList全部拥有,且基本与上文常用方法一致,不在赘述,但是equals方法在此类中被重写,上文已经描述
底层和数组集合有关 特点快:遍历快,访问快 有序 可重复 缺点:插入删除较慢
ArrayList(线程不安全) 不同步
泛型
用于限制集合存储同种类型 ==ArrayList==E全部采用包装类
-
好处
大多数情况下,集合存储的都是同一类型的数据
-
安全性高。消除了绝大部分类型转换问题,增加了维护性和可读性
-
消除了强制类型转化,减少了出错率
若采用add输入,add(Object obj)无论输入何值,都会将其先转换成包装类后再存储
-
增加了性能
-
泛型代码声明
public class ArrayListDemoFinal {
public static void main(String[] args) {
ArrayList<String> arrayList0 = new ArrayList<String>();
ArrayList<Integer> arrayList1 = new ArrayList<Integer>();
ArrayList<Boolean> arrayList2 = new ArrayList<Boolean>();
ArrayList<Byte> arrayList3 = new ArrayList<Byte>();
ArrayList<Character> arrayList4 = new ArrayList<Character>();
ArrayList<Float> arrayList5 = new ArrayList<Float>();
ArrayList<Double> arrayList6 = new ArrayList<Double>();
ArrayList<Short> arrayList7 = new ArrayList<Short>();
ArrayList<Long> arrayList8 = new ArrayList<Long>();
}
}
欢迎指正