1.Collection 接口练习以及常用方法的使用 迭代器使用
package cn.sk.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接口相关对象
//Collection c = new Collection();//报错,因为接口不能实例化
/**1.<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.contains(300));//true,判断集合中是否包含指定元素300
System.out.println(c.hashCode());//返回此集合对应的哈希码
System.out.println(c.isEmpty());//false,判断集合是否为空
System.out.println(c.remove(100));//true,移除集合中的指定元素100
System.out.println(c);
System.out.println(c.size());//获取集合中元素的个数,类似数组的长度
System.out.println(c.equals(200));//false,判断集合对象与200是否相等
System.out.println(c.toArray());//[Ljava.lang.Object;@1b6d3586
System.out.println(Arrays.toString(c.toArray()));//把集合转为数组,查看数组元素需要使用工具类
//2.2测试集合间的操作
Collection<Integer> c2 = new ArrayList<Integer>();
c2.add(2);//给c2集合添加元素
c2.add(4);//给c2集合添加元素
c2.add(6);//给c2集合添加元素
System.out.println(c2);
c.addAll(c2);//把c2集合中的元素添加到c集合中
System.out.println(c);
System.out.println(c.contains(c2));//false,查看c集合是否包含一个叫c2的元素
System.out.println(c.containsAll(c2));//true,查看c集合是否包含c2集合的所有元素
System.out.println("——————————————————————————————————————————————");
System.out.println(c);
System.out.println(c.retainAll(c2));//取c集合中属于c2集合的所有元素"交集"
System.out.println(c);
System.out.println("——————————————————————————————————————————————");
System.out.println(c.removeAll(c2));//true,移除c集合中输入c2集合中的所有元素
System.out.println(c);
//2.3用来遍历/迭代集合中的元素
/**0.需要获取这个集合的迭代器
* 1.如何获取迭代器c.iterator()
* 2.判断集合是否有下个元素it.hasNext()
* 3.获取当前迭代到的元素it.next()
* */
c.add(1);
c.add(2);
c.add(3);
Iterator<Integer> it = c.iterator();
//通过iterator迭代器,循环获取集合中的所有元素
while(it.hasNext()){
//hasNext用来判断集合是否有下个集合,有就返回true,继续循环取值
Integer num = it.next();//next()用来获取迭代到的元素
System.out.println(num);
}
}
}
2.List接口练习
package cn.sk.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**本类用于测试List接口*/
public class TestList {
public static void main(String[] args) {
//1.创建List接口多态对象,注意List是接口,不能实例化
List<String> list = new ArrayList<String>();
//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.remove("千顺娃"));
System.out.println(list.size());//获取集合中元素的个数
System.out.println(list.hashCode());//获取集合对象的哈希码
System.out.println(list.isEmpty());//判断集合是否为空
System.out.println(list.contains("小紫娃"));//判断集合中是否有指定元素
System.out.println(list.equals("喷火娃"));//false,"喷火娃是否与集合list相同"
System.out.println(Arrays.toString(list.toArray()));//将集合转为数组
//3.测试List接口特有的方法--都是可以根据索引进行操作的方式
list.add("小蝴蝶");
System.out.println(list);
list.add(0,"蛇精");//在指定索引处添加元素,首个位置下标为0
System.out.println(list);
System.out.println(list.get(2));//头铁娃,获取指定索引处的元素
System.out.println(list.indexOf("小蝴蝶"));
list.add("小蝴蝶");
System.out.println(list.lastIndexOf("小蝴蝶"));
System.out.println(list);//判断指定元素最后一次出现的位置
System.out.println(list.remove(5));//根据索引移除指定元素
System.out.println(list);
System.out.println(list.set(7, "蝎子精"));//重置指定下标处的元素值
System.out.println(list);
List<String> sublist = list.subList(3, 7);//截取子串,含头不含尾[3,7)
System.out.println(sublist);
//4.测试集合间的操作
List<String> list2 = new ArrayList<String>();
list2.add("1");
list2.add("2");
list2.add("3");
System.out.println(list.addAll(list2));//把list2追加到list集合的最后
System.out.println(list);
System.out.println(list.addAll(1,list2));//把list2集合的所有元素添加到指定位置
System.out.println(list);
System.out.println(list.containsAll(list2));//判断list集合是否包含list2集合中的所有元素
System.out.println(list.retainAll(list2));//保留list集合中属于list2集合中的所有元素,交集
System.out.println(list);
System.out.println(list.removeAll(list2));//移除list集合中属于list2集合中的所有内容
System.out.println(list);
}
}
3.List迭代器练习
package cn.sk.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**本类用于测试List的迭代*/
public class TestList2 {
public static void main(String[] args) {
//1.创建List接口对象
List<String> list = new ArrayList<String>();
//2.向集合中添加元素
list.add("喜羊羊");
list.add("美羊羊");
list.add("费羊羊");
list.add("小肥羊");
list.add("烤全羊");
//3.测试集合的迭代
/**集合的迭代方式:
* 1.for循环
* 2,增强for循环\高效for\foreach循环
* 3.iterator迭代器循环
* */
//方式一:因为List集合是有序的,元素是有下标的,所以可以根据下标进行遍历
//从哪开始 到哪结束 怎么变化
for (int i = 0; i < list.size(); i++) {
//根据下标获取集合中的对应位置上的元素
String s = list.get(i);
System.out.println(s);
}
System.out.println("****方式一****");
//12:3 3是要遍历的元素 2是遍历得到的元素的类型 1是遍历得到的元素的名字
for(String s :list){
System.out.println(s);
}
System.out.println("****方式二****");
//方式三:通过集合对象的迭代器进行迭代
/**1.获取指定集合的迭代器*/
Iterator<String> it = list.iterator();
/**由于我们不知道集合有多少元素,所以我们用while循环遍历集合所有元素*/
while (it.hasNext()){
System.out.println(it.next());
}
System.out.println("****方式三****");
System.out.println(list);
//方式四:listIterator()是List接口独有的
//listIterator是Iterator的子接口,可以拥有父接口的方法,还拥有自己独有方法(逆序遍历)
ListIterator<String> it2 = list.listIterator();
while (it2.hasNext()){
System.out.println(it2.next());
}
System.out.println("****方式四****");
}
}
4.ArrayList测试练习
package cn.sk.collection;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;
/**本类用于测试ArrayList的相关内容*/
public class TestArrayList {
public static void main(String[] args) {
//1.创建对象
//底层会自动带我们创建数组存放对象,默认初始容量为10
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//2.向集合添加元素
arrayList.add(100);
arrayList.add(200);
arrayList.add(300);
arrayList.add(400);
System.out.println(arrayList);
//3.开始测试--单个集合
System.out.println(arrayList.contains(100));//判断是否包含元素100
System.out.println(arrayList.get(0));//根据下标获取指定元素
System.out.println(arrayList.indexOf(500));//获取指定元素下标
System.out.println(arrayList.set(2,200));//给集合的指定下标处添加元素
System.out.println(arrayList);
System.out.println(arrayList.lastIndexOf(200));//获取指定元素最后一次出现的位置
System.out.println(arrayList.isEmpty());//判断集合是否为空
System.out.println(arrayList.remove(1));//移除指定下标处的元素
//arraylist.remove(300);
/**这样写会报错:数组下标越界,index=300,size=4
* 这个方法是根据下标值来删除元素的,而本集合没有300的下标,所以数组下标越界
* 如果根据具体元素内容移除元素,需要先把int类型的数据转换成Integer数据类型*/
arrayList.add(300);
System.out.println(arrayList);
System.out.println(arrayList.remove(Integer.valueOf(300)));
System.out.println(arrayList);
System.out.println(arrayList.size());//获取集合中元素的个数
System.out.println(Arrays.toString(arrayList.toArray()));//集合转数组
//迭代方式
System.out.println("迭代方式一");
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
System.out.println("迭代方式二");
for(Integer i:arrayList){
System.out.println(i);
}
System.out.println("迭代方式三");
Iterator<Integer> it = arrayList.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
System.out.println("迭代方式四");
ListIterator<Integer> it1 = arrayList.listIterator();
while (it1.hasNext()){
System.out.println(it1.next());
}
}
}