Collection
|---List:元素是有序的,元素可以重复,因为该集合体系有索引
|----ArrayList:底层的数据结构是用的是数组 数据结构。 线程不同步。
|-----LinkList;底层的数据结构是用的链表结构
|------Vector; 底层数据结构 是数组 数据结构。 线程是同步的,支持枚举
|---Set: 元素是无序的(存入和去除的循序不一定一致),元素不可以重复;
|-----HashSet:底层数据结构是哈希表
HashSet:如何保证元素的唯一性;
如果元素的HashCode值相同,才会判断equals方法,是否为true
|-----TreeSet; 可以对Set集合元素进行排序。
底层数据结构是二叉树。
保证元素唯一性依据:comparTo方法return 0;
TreeSet的第二种排序方式;
当元素自身不具备比较性时,或者具备的比较性不是所需要的
这时需要让容器自身具备比较性。
定义了比较器,将比较器
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法
List:
特有方法,凡是可以操作角标的方法都是该体系特有的方法。
1.增
add(index,element);
addAll(index, Collection)
2.删
Remove(index)
3.改
Set(index, element)
4.查
get(indxx)
subList(from, to);
listIterator();
List 集合特有的迭代器,ListIterator是Iterator的子接口
在迭代式,不可以通过集合对象的方法操作集合中的元素。
会发成异常,所以在迭代器时,只能用迭代器方法操作元素可是Iterator方法只能对元素进行判断,去除,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。 该接口只能通过List集合的listIterator()方法获取。
下面介绍集合框架的共性方法:以ArrayList()来举例说明
import java.util.*; public class ArrayListDemo { public static void main(String[] args) { ArrayList a1 = new ArrayList(); //1 添加元素 a1.add("java01");//这里是ArrayList的添加方法因为字符串也是对象 所以可以传字符串 这里 a1.add("java02"); a1.add("java03"); sop("a1 = "+a1); //2 获取长度 sop("长度为:" +a1.size());//获取长度 //3 移除元素 a1.remove(2);//移除第三个元素 移除时必须是在容器内 如果越界则会发生异常 sop("a1 = " +a1); //4 判断元素 sop("容器是否为空 "+a1.isEmpty());//判断容器内元素是否为空 为空 true 不为空false sop("java01是否存在:"+a1.contains("java01"));//判断某元素是否存在 // 求两个容器中的交集 用到 retainAll()方法 ArrayList a2 = new ArrayList(); a2.add("java0001"); a2.add("java0002"); a2.add("java0003"); a2.add("java0004"); ArrayList a3 = new ArrayList(); a3.add("java0001"); a3.add("java0002"); a3.add("java0006"); a3.add("java0005"); //a2.retainAll(a3);//求a2 在 a3中相同的部分 //sop("a2和a3相同的部分为:"+a2); a2.removeAll(a3);//将a3在a2中相同的部分去掉 sop("a2在a3中不同的部分并删除:"+ a2); sop("a3为:" + a3); } public static void sop(String st)//这个是接收String 类型的 { System.out.println(st); } public static void sop(Object obj)//这个是接收Object 类型的 { System.out.println(obj); } }
import java.util.ArrayList; import java.util.Iterator; //下面是遍历容器的方法 public class ArrayListDemo2 { public static void main(String[] args) { method_get(); } // 5 遍历容器中的对象使用 iterator()方法 下面用个方法举例说明 public static void method_get() { ArrayList a4 = new ArrayList(); a4.add("java0001"); a4.add("java0002"); a4.add("java0003"); a4.add("java0004"); Iterator it = a4.iterator();//通过把这个容器中的 //sop(it.next());//获得容器中一个对象 sop(it.hasNext());//判断容器中是否还有元素可以迭代,如果有返回true while(it.hasNext())//获取迭代器 用于去除容器中所有元素 { sop(it.next()); } } public static void sop(Object obj) { System.out.println(obj); } }
//这里是ArrayList中特有的方法的使用 import java.util.*; public class ListDemo { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList b1 = new ArrayList(); // 1, 增加元素 b1.add("java001"); b1.add("java002"); b1.add("java003"); b1.add("java004"); sop("原集合是:" + b1); // 1,1 在指定位置添加元素; b1.add(1, "java111"); sop("在角标为1的位置添加java111:" + b1); // 2,删除指定位置元素 b1.remove(3); sop("删除角标为3的元素:" + b1); // 3,修改元素 b1.set(3, "java333"); sop("修改角标为3的元素" + b1); // 4,通过角标获取元素 sop("获取角标1的元素:" + b1.get(1)); // 4,1 获取所有元素 用循环就行了 sop("获取所有元素:"); for (int x = 0; x < b1.size(); x++) { sop("b[" + x + "]" + b1.get(x)); } // 5, 通过对象获取位置 indexOf() sop("java001的位置 : " + b1.indexOf("java001")); List sub = b1.subList(0, 2);// 注意 这里是List sop("角标从0到2的元素" + sub); // 6 列表迭代器 ListIterator() ListIterator li = b1.listIterator();// 这里是ListIterator 用这个可以添加和修改 // 用Iterator不可以 while (li.hasNext()) { Object obj = li.next();// 因为不知道容器中是什么类型 所以接收用Object类型 if (obj.equals("java333")) { li.set("java3"); } } sop("替换后集合是:" + b1); } }
package List1; import java.util.*; /* * 需求:去除ArrayList重复元素 **/ public class ArrayListDemo3 { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList a1 = new ArrayList(); a1.add("java01"); a1.add("java02"); a1.add("java01"); a1.add("java02"); a1.add("java03"); sop(a1); a1 = bijiao(a1);//进行比较 sop(a1); } public static ArrayList bijiao(ArrayList a1)//这里的比较是简单的比较 没有对多个属性进行比较,下个例子会有 { //建立一个临时容器 ArrayList new1 = new ArrayList(); Iterator it = a1.iterator();//用于对a1进行遍历的 建立对象引用 while(it.hasNext()) { Object obj = it.next(); if(!new1.contains(obj))//如果这个临时容器NEW1中不包含obj里面的元素 { new1.add(obj);//那么添加进入new1 } } return new1; } }
import java.util.ArrayList; /* *需求:将自定义对象作为元素存入ArrayList()数组中,并去除相同元素 *建立人类 属性有姓名 年龄 同姓名同年龄 视为重复元素 * *思路:1 对人描述 将数据封入对象 * 2 定义容器 将人进行存储 * 3 取出 **/ import java.util.Iterator; class Person { private String name; private int age; Person(String name, int age)// 重写构造方法 { this.name = name; this.age = age; } public boolean equals(Object obj) { if(!(obj instanceof Person))//instanceof 判断其左边对象是否为其右边类的实例 { return false; } Person p = (Person)obj;//强制转换 return this.name.equals(p.name) && this.age == p.age; } public String getName() { return name; } public int getAge() { return age; } } public class ArrayList4 { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList a1 = new ArrayList(); a1.add(new Person("lisi01", 23)); a1.add(new Person("lisi02", 23)); a1.add(new Person("lisi03", 25)); a1.add(new Person("lisi04", 25)); a1.add(new Person("lisi04", 25)); a1 = bijiao(a1); Iterator it = a1.iterator(); while (it.hasNext()) { // Object obj = it.next();//返回一个Object类型,因为Iterator不知道容器中是什么类型 // Person p = (Person)obj;//向下转型 将obj转成 person类型 Person p = (Person) it.next();// 一般写成这个简单形式 sop(p.getName() + "......" + p.getAge()); } } public static ArrayList bijiao(ArrayList a1) { //建立一个临时容器 ArrayList new1 = new ArrayList(); Iterator it = a1.iterator();//用于对a1进行遍历的 建立对象引用 while(it.hasNext()) { Object obj = it.next(); if(!new1.contains(obj))//如果这个临时容器NEW1中不包含obj里面的元素 { new1.add(obj);//那么添加进入new1 } } return new1; } }
*********************************************************************************************************************************************************
下面的是LinkList 的方法 链表
import java.util.*; /* * LinkedLink:特有方法 * addFirst(); * addLast(); * * getFirst(); * getLast(); * 获取元素,但不删除元素,如果集合中没有元素将异常 * * removeFirst(); * removeLast(); * 获取元素,并将元素删除,如果集合中没有元素将抛出异常 * * * jdk1.6后出现替代方法 * * offerFirst(); * offerLast(); * * peekFirst(); * peekLast(); * * poliFirst(); * poliLast() * * */ public class LinkListDemo { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { //第一个位置添加 最后一个位置添加 LinkedList link = new LinkedList(); link.addFirst("java01");//在第一个位置添加 link.addFirst("java02"); link.addFirst("java03"); link.addFirst("java04"); /* link.addLast("java01");// 最后一个位置添加 link.addLast("java02"); link.addLast("java03"); link.addFirst("java04"); */ sop("链表::"+link); //获取元素 sop("第一个元素:"+link.getFirst());//获取第一个元素 sop("最后一个元素:"+link.getLast());//获取最后一个元素 //获取元素并删除 sop(link.removeFirst()); sop(link); sop(link.removeLast()); sop(link); sop("剩余的元素个数" +link.size()); //遍历 while(!link.isEmpty())//元素不为空 { sop("边遍历边删除:"+link.removeFirst()); } } }