1. 集合
1.1 泛型
-
泛型,不是指一种具体的类型,而是说,这里有个类型需要设置,那么具体设置成什么类型,得看具体的使用
-
泛型通常与集合一起使用,用来限制集合中元素的类型 泛型设置了什么类型,那么这个集合只能存这个泛型类型的数据
-
泛型是一颗“语法糖”: 1)泛型可以把报错的时机提前,用于在编译期检查集合的数据类型,只要不是规定的类型,就报错,通不过编译 2)泛型只在编译时生效,编译通过以后,说明符合语法,泛型就会被抛弃,字节码文件中没有泛型
-
泛型的类型必须使用引用类型,比如Student、Integer
-
泛型方法:如果在方法上使用泛型,必须两处同时出现: 1)一个是方法的参数列表中的参数类型 2)一个是返回值前的泛型类型,表示这是一个泛型方法
1.2 Collection
-
Collection是集合层次中的根接口
-
集合的继承关系
-
是集合层次的根接口,学习抽象父级的公共方法
Collection集合方法总结
单个集合的操作:
boolean add(E e) 将指定元素添加到集合中 void clear() 清空集合 boolean contains(Object o) 判断本集合是否包含指定的元素 boolean equals(Object o) 比较集合对象与参数对象o是否相等 int hashCode() 返回本集合的哈希码值。 boolean isEmpty() 判断本集合是否为空 boolean remove(Object o) 从本集合中移除指定元素o int size() 返回本集合中元素的个数 Object[] toArray() 将本集合转为数组
集合间的操作:
boolean addAll(Collection<> c) 将c集合中的所有元素添加到本集合中 boolean containsAll(Collection<> c) 判断本集合是否包含c集合的所有元素 boolean removeAll(Collection<> c) 移除本集合中属于参数集合c的所有元素 boolean retainAll(Collection<> c) 保留本集合与参数集合c的公共元素
集合的迭代:
Iterator iterator() 返回本集合的迭代器
-
测试常用方法 可以查询API手册进行方法的练习
package cn.tedu.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; /*本类用于测试Collection接口*/ public class TestCollection { public static void main(String[] args) { //1.创建Collection相关对象 //<Integer>是泛型,用来约束集合中的数据类型,不能是基本类型,必须是引用类型 Collection<Integer> c=new ArrayList<Integer>(); //2.1测试集合中的常用方法 c.add(100); c.add(200); c.add(300); c.add(400); c.add(500); System.out.println(c); // c.clear();//清空集合 System.out.println(c);//[] System.out.println(c.hashCode());//127240651,获取当前对象的哈希码值 System.out.println(c.toString());//不推荐写,底层自动调用 System.out.println(c.equals(200));//false,集合对象c与集合中的元素200不相等 System.out.println(c.contains(200));//true,用来判断集合中是否包含指定的元素200 System.out.println(c.isEmpty());//判断c集合是否为空 System.out.println(c.remove(100));//true,用于移除集合中指定的元素 System.out.println(c);//[200, 300, 400, 500] System.out.println(c.size());//4 Object[] objects = c.toArray();//将指定的集合转为object类型的数组 System.out.println(objects);//[Ljava.lang.Object;@1540e19d System.out.println(Arrays.toString(objects));//[200, 300, 400, 500] //2.2测试多个集合间的操作 Collection<Integer> c2=new ArrayList<Integer>(); c2.add(2); c2.add(4); c2.add(5); System.out.println(c2);//[2, 4, 5]打印查看集合中的元素 c.addAll(c2);//将c2集合的所有元素添加到c集合中 System.out.println(c);//[200, 300, 400, 500, 2, 4, 5] System.out.println(c.containsAll(c2));//是否包含c2的所有元素true c.removeAll(c2);//将c集合中属于c2集合的所有元素删除 System.out.println(c);//[200, 300, 400, 500] System.out.println(c.containsAll(c2));//false c.add(5); System.out.println(c);//[200, 300, 400, 500, 5] System.out.println(c2);//[2, 4, 5] System.out.println(c.retainAll(c2));//true,保留c集合中也属于c2集合的所有元素 System.out.println(c);//[5] //3.集合的迭代/集合的遍历 /** * 迭代步骤: * 1.获取集合的迭代器 * 2.判断集合中是否仍有下一个元素可以迭代 * 3.获取当前迭代到的元素 */ Iterator<Integer> it = c2.iterator(); while (it.hasNext()){ System.out.print(it.next()+" ");//2 4 5 } } }
2. List接口
List接口的特点
-
List集合是有下标的
-
List集合是有顺序的
-
List集合可以存放重复的数据
List集合方法总结
单个集合间的操作
void add(int index, E element) 在集合的指定下标index处插入指定元素element E get(int index) 返回本集合中指定下标index处的元素 E remove(int index) 移除本集合中指定下标index处的元素 E set(int index, E element) 用参数元素element替换集合中指定下标index处的元素 int indexOf(Object o) 判断指定元素o在本集合中第一次出现的下标,如果不存在,返回-1 int lastIndexOf(Object o) 判断指定元素o在本集合中最后一次出现的下标,如果不存在,返回-1 List subList(int fromIndex, int toIndex) 截取子集合,包含formidex处的元素,不包含toIndex处的元素
集合间的操作与集合的迭代
boolean addAll(int index, Collection<> c) 将参数集合c中的所有元素,插入到本集合中指定的下标index处 ListIterator listIterator() 返回此列表元素的迭代器,这个是List自己的,不太常用,可以逆序迭代
package cn.tedu.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/*1.本类用于测试List接口*/
public class TestList {
public static void main(String[] args) {
//1.创建lsit多态对象,注意List是一个接口,不可以实例化
List<String> list=new ArrayList<>();
//2.测试继承自Collection中的方法
list.add("大力娃");
list.add("千顺娃");
list.add("头铁娃");
list.add("喷火娃");
list.add("喷水娃");
list.add("隐身娃");
list.add("小紫娃");
System.out.println(list);//[大力娃, 千顺娃, 头铁娃, 喷火娃, 喷水娃, 隐身娃, 小紫娃]
// list.clear();清空集合
//System.out.println(list);//[]
System.out.println(list.contains("喷火娃"));//true,判断是是否包含指定元素
System.out.println(list.equals("喷火娃"));//false,集合对象与其中一个元素不相等
System.out.println(list.isEmpty());//false,判断集合是否为空在
System.out.println(list.remove("小紫娃"));//移除集合中元素的个数
System.out.println(list);//[大力娃, 千顺娃, 头铁娃, 喷火娃, 喷水娃, 隐身娃]
System.out.println(list.size());//6,获取集合中元素的个数
System.out.println(Arrays.toString(list.toArray()));//[大力娃, 千顺娃, 头铁娃, 喷火娃, 喷水娃, 隐身娃]将集合转为数组
//3.测试List接口自己的方法,由于List是有顺序的,所以可以根据索引来操作集合中的元素
list.add("小蝴蝶");//默认的添加方法追加在末尾
list.add(1,"小蝴蝶");//向指定的索引处添加元素
list.add(3,"蛇精");
System.out.println(list);
System.out.println(list.indexOf("小蝴蝶"));//1,获取元素第一次出现的索引值
System.out.println(list.lastIndexOf("小蝴蝶"));//8,获取元素最后一次出现的索引值
System.out.println(list.remove(5));//根据指定的索引值删除结合中元素
System.out.println(list);//[大力娃, 小蝴蝶, 千顺娃, 蛇精, 头铁娃, 喷水娃, 隐身娃, 小蝴蝶]
System.out.println(list.get(3));//蛇精,获取集合中指定索引处的元素
System.out.println(list);//[大力娃, 小蝴蝶, 千顺娃, 蛇精, 头铁娃, 喷水娃, 隐身娃, 小蝴蝶]
System.out.println(list.set(7, "蝎子精"));//修改指定索引处的元素蝎子精,会将被修改的元素返回
System.out.println(list);//[大力娃, 小蝴蝶, 千顺娃, 蛇精, 头铁娃, 喷水娃, 隐身娃, 蝎子精]
//4.测试集合间的操作
List<String> list2=new ArrayList<>();
list2.add("1");
list2.add("2");
list2.add("3");
list2.add("4");
System.out.println(list2);
System.out.println(list.addAll(list2));//true
System.out.println(list);//[大力娃, 小蝴蝶, 千顺娃, 蛇精, 头铁娃, 喷水娃, 隐身娃, 蝎子精, 1, 2, 3, 4]
System.out.println(list.addAll(1,list2));//true将list2集合的所有元素按照指定索引添加到List集合
System.out.println(list);//[大力娃, 1, 2, 3, 4, 小蝴蝶, 千顺娃, 蛇精, 头铁娃, 喷水娃, 隐身娃, 蝎子精, 1, 2, 3, 4]
System.out.println(list.containsAll(list2));//true,判断list2是否包含list2集合中的元素
System.out.println(list.removeAll(list2));//删除list集合中属于list2集合的所有元素
System.out.println(list);
//迭代集合的方法
//for循环
for (int i = 0; i <list.size() ; i++) {
System.out.print(list.get(i)+" ");//大力娃 小蝴蝶 千顺娃 蛇精 头铁娃 喷水娃 隐身娃 蝎子精
}
System.out.println();
//foreach循环
for (String sd:
list) {
System.out.print(sd+" ");//大力娃 小蝴蝶 千顺娃 蛇精 头铁娃 喷水娃 隐身娃 蝎子精
}
System.out.println();
//迭代器
Iterator<String> it= list.iterator();
while (it.hasNext()){
System.out.print(it.next()+" ");//大力娃 小蝴蝶 千顺娃 蛇精 头铁娃 喷水娃 隐身娃 蝎子精
}
}
}