List接口 ,Set接口
import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import com.hanqi.model.Book; public class Main { public static void main(String[] args) { MyArrayList list = new MyArrayList(); //List接口的底层原理 Book b = new Book("格林童话2"); list.add(new Book("格林童话1")); list.add(b); list.add(new Book("格林童话3")); list.add(new Book("格林童话4")); list.add(new Book("格林童话5")); list.add(new Book("格林童话6")); System.out.println(list.size()); System.out.println(list.get(2)); System.out.println(list.remove(b)); System.out.println(list.remove(new Book("格林童话5"))); //如果要剔除掉,你new了一个新的, //c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, //自定义的类, 需要自己重写父类的equals方法 //重写equals方法, 也应该重写hashCode方法 System.out.println(list.size()); //集合是一种容器 Collection c1 = new ArrayList(); //Arraylist 是Collection的实现关系 Collection c2 = new ArrayList(); c1.add("aaa"); c1.add("bbb"); c1.add("ccc"); c2.add("aaa"); c2.add("bbb"); c2.add("ddd"); System.out.println(c1.retainAll(c2));//返回一个boolean值, //当list的内容被改变的时候返回true, 否则返回false //总结:像上面的情况,就是说先取出c1与c2的交集取出来给c1,现在的c1与之前的c1进行比较,如果内容改变就返回ture List list1 = new ArrayList(); //父类引用指向子类,List里的方法可以使用,ArrayList初始容量为10 list1.add(100); list1.add("bbb"); list1.add(new Book("黑猫警长")); list1.add(new String("ddd")); System.out.println(list1.get(2)); //获取的索引值为2的内容ccc Object obj = list1.set(2, "frsgrdfsghdrtfhjdtg"); //有一个返回值,需要再get一下 System.out.println(obj); //返回的是"ccc"; System.out.println(list1.get(2)); //得到是"新设置的内容" list1.remove(100); list1.remove(new String("bbb")); list1.remove(new Book("黑猫警长")); list1.remove("ddd"); System.out.println(list1.size()); //输出长度变为几 int i = list1.indexOf(100); //这个值第一次出现的索引值 System.out.println(i); int i2 = list1.lastIndexOf("ddd"); //这个值最后一次出现的索引值 System.out.println(i2); /* List接口 get set(有一个返回值要注意 !) add remove(int) //传的是索引值 remove(Object) indexOf lastIndexOf*/ 泛型 List <String> list = new ArrayList <String>(); //规定是字符串型的就是输入的是字符串,而且 //是引用类型 list.add("aa");//c.add(参数类型必须是Object) list.get(0); /*目的是为了免去强转Object的麻烦 1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型 2, 集合中取出来的时候需要转型, 效率低, 易出错*/ } }
遍历
输出 aaa,bbb,ccc,ddd, 唯一不好之处在于无法取出索引值 ,for循环遍历, 1.5以后才出现的for(Objetc o : array) {}
有优点有缺点,for each