java------集合List

来源:互联网 发布:品牌推广如何利用seo 编辑:程序博客网 时间:2024/06/07 01:37




Collection 

|---List:元素是有序的,元素可以重复,因为该集合体系有索引

    |----ArrayList:底层的数据结构是用的是数组 数据结构。 线程不同步。

    |-----LinkList;底层的数据结构是用的链表结构

    |------Vector; 底层数据结构 是数组 数据结构。 线程是同步的,支持枚举

|---Set: 元素是无序的(存入和去除的循序不一定一致),元素不可以重复;

    |-----HashSet:底层数据结构是哈希表

HashSet:如何保证元素的唯一性;

如果元素的HashCode值相同,才会判断equals方法,是否为true

    |-----TreeSet; 可以对Set集合元素进行排序。

底层数据结构是二叉树。

保证元素唯一性依据:comparTo方法return 0;

TreeSet的第二种排序方式;

当元素自身不具备比较性时,或者具备的比较性不是所需要的

这时需要让容器自身具备比较性。

定义了比较器,将比较器  

注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcodeequals方法

List:

特有方法,凡是可以操作角标的方法都是该体系特有的方法。

1.增

add(index,element);

addAll(index, Collection)

2.删

Remove(index)

3.改

Set(index, element)

4.查

get(indxx)

subList(from, to);

listIterator();

List 集合特有的迭代器,ListIteratorIterator的子接口

在迭代式,不可以通过集合对象的方法操作集合中的元素。

会发成异常,所以在迭代器时,只能用迭代器方法操作元素可是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 不为空falsesop("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());//判断容器中是否还有元素可以迭代,如果有返回truewhile(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);// 注意 这里是Listsop("角标从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());    }    }}