java中集合的特点



java中集合的特点


集合的关系图


/**
 * 集合的特点
 * 1.用于存储对象的容器
 * 2.集合的长度 是可变 的
 * 3.集合中不可以存储 基本数据类型值
 *
 * 集合容器因为内部的数据结构不同,有多种具体容器,不断向上抽取,就形成了集合框架
 * 框架的顶层Collection接口
 *
 * Collection的常见方法
 *
 * 1.添加
 *    boolean add(E e)  确保此 collection 包含指定的元素(可选操作)。
 *    boolean addAll(Collection c)
 * 2.删除
 *    boolean remove()
 *    boolean removeAll()
 * 3.判断
 *    boolean contains()
 *    boolean containsAll()
 *    boolean isEmpty():判断集合中是否有元素
 * 4.获取
 *    int size():返回此Collection中的元素数
 *    Iterator  iterator:取出元素的方式 :迭代器
 *    该对象必须依赖于具体的容器,因为每一个容器的数据结构都 不同
 *    所以该迭代器对象 是在容器中进行内部实现的
 *    对于使用容器者而言,具体的实现不重要,只要通过窗口获取到该实现的迭代器对象即可
 *    也就是iterator()方法
 * 5.其它
 *    boolean retainAll():取交集  将两个集合中的相同元素从调用removeAll的集合中移除
 *    Object[] toArray():将集合转成数组
 *
 *
 * -----------------------------------
 *  Collection
 *   两个最重要的子类
 *   1.List:有序(存入和取出的顺序一致),元素都 有索引,元素可以重复
 *   2.Set:元素不能重复,无序。
 *
 *   List:特有的常见方法,有一个共性特点就是都可以操作角标
 *       1.添加
 *          boolean add(int index, E element)在列表的指定位置插入指定元素(可选操作)。
 *       2.删除
 *          boolean remove(Object o)从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
 *       3.修改
 *          Object set(index,element)
 *       4.获取
 *           Object get(index)
 *           int indexOf(object)
 *           int lastIndexOf(object)
 *           List subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
 *
 *  List集合是可以完成对元素的增删改查的
 *
 *  List:
 *    ---Vector:内部是数组数据结构,是同步的(线程安全)。增删,查询都很慢。
 *    ---ArrayList:内部是数组结构,是不同步的。替代Vector.查询的速度快。
 *    ---LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
 *
 *  LinkedList:
 *     addFirst();
 *     addLast();
 *
 *     getFirst();//获取但不移除,如果链表为空,抛出异常NoSuchElementException
 *     getLast();
 *     jdk1.6以后
 *     pollFirst();//获取但不移除,如果链表为空 ,返回null;
 *     pollLast();//
 *
 */

//Collection的demo
public class CollectionDemo {
    public static void main(String[]args){
        Collection collection = new ArrayList();
        show(collection);
    }

    private static void show(Collection collection) {
        collection.add("aaa");
        collection.add("bbb");
        collection.add("ccc");
        collection.add("ddd");


        System.out.println(collection);
    }
}
//IteratorDemo
 
  
public class IteratorDemo {
    public static void main(String[]args){
        Collection collection = new ArrayList();
        collection.add("aaa");
        collection.add("bbb");
        collection.add("ccc");
        collection.add("ddd");

        //使用了Collection中的iterator()方法。调用 集合中的迭代器,是为了获取集合中的迭代器对象

        //用法一
        Iterator iterator = collection.iterator();
//        while (iterator.hasNext()){
//            System.out.println(iterator.next());
//        }

        //用法二
        for (Iterator iterator1 = collection.iterator();iterator1.hasNext();){
            System.out.println(iterator1.next());
        }
    }
}
 
  
//ListDemo
 
  
public class ListDemo{
        public static void main(String[]args){
            List list = new ArrayList();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            list.add("ddd");
            list.add("eee");
            System.out.println(list);
            //插入元素
//            list.add(1,"fff");
//            System.out.println(list);
            //删除元素
//            System.out.println(list.remove(1));
            //修改元素
//            System.out.println(list.set(3,"iii"));
            //获取元素
//            System.out.println(list.get(4));
            //获取子元素
            System.out.println(list.subList(2,4));

            System.out.println(list);
        }

//ListDemo2
 
  
public class ListDemo2 {
    public static void main(String[]args){
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("eee");
        System.out.println(list);

        ListIterator listIterator = list.listIterator();
        //它可以实现在迭代过程 中完成 对元素的增删改查
        //注意,只有list列表具备些功能
        while (listIterator.hasNext()){
            Object ob = listIterator.next();
            if (ob.equals("bbb")){
                listIterator.add("ggg");
            }
        }
        System.out.println(list);

        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
        System.out.println(list);
/*
        Iterator iterator=list.iterator();
        while (iterator.hasNext()){
            //如果这样写,会报错,在迭代过程中,不要使用集合操作元素,容易抛出异常
            //java.util.ConcurrentModificationException
            //当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常
            //可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作
            Object ob = iterator.next();
            if (ob.equals("bbb")){
                list.add("ggg");
            }
        }
        System.out.println(list);
    */
    }
}
//VectorDemo
 
  
public class VectorDemo {
    public static void main(String[]args){
        Vector vector = new Vector();
        vector.addElement("aaa");
        vector.addElement("bbb");
        vector.addElement("ccc");
       Enumeration enumeration =  vector.elements();
        while (enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }
    }
}
 
  
//LinkListDemo
 
  
/**
 * 请使用LinkedList来模拟一个堆栈或者队列数据结构
 * <p>
 * 堆栈:
 * 栈的特点:先进后出
 * <p>
 * 队列:先进先出
 */

class DuiLie {
    private LinkedList list;

    public DuiLie() {
        list = new LinkedList();
    }

    public void add(Object o) {
        list.addLast(o);
    }

    public Object getList() {
        return list.removeFirst();
    }

    public boolean isEmpty() {
        return list.isEmpty();
    }
}

public class LinkedListTest {
    public static void main(String[] args) {
        DuiLie duiLie = new DuiLie();
        duiLie.add("aaa");
        duiLie.add("bbb");
        duiLie.add("ccc");
        duiLie.add("ddd");
        while (!duiLie.isEmpty()) {
            System.out.println(duiLie.getList());
        }
    }
}

// 利用arrayList去除集合中的重复元素
public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int hashCode() {//判断hash值是否相同

//        System.out.println(this+"......hashcode...");
        return name.hashCode() + age;
    }
    @Override
    public boolean equals(Object obj) {//判断内容是否相同
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Person)) {
            throw new ClassCastException("类型转换错误");
        }
//        System.out.println(this + "......equals...." + obj);
        Person person = (Person) obj;
        return this.name.equals(person.name) && this.age == person.age;
    }

    @Override
    public String toString() {
        return name+":"+age;
    }
}

public class ArrayListTest {
    public static void main(String[] args){
        test();
        test2();
    }

    //存自定义对象
    //注意://arrayList判断元素是否相同 remove(),contains(),的依据是equals()方法,
             //HashSet的依据是hashCode()和equals()方法,该元素是否有和该容器中的元素相同
             //所以对于自定义对象,一定要重写equals()方法,
    private static void test2() {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Person("aaa", 10));
        arrayList.add(new Person("bbb", 20));
        arrayList.add(new Person("ccc", 30));
        arrayList.add(new Person("bbb", 20));
        arrayList.add(new Person("ccc", 30));

        System.out.println(arrayList);

        arrayList = singletest(arrayList);

        System.out.println(arrayList);
    }

    //存字符串
    private static void test() {
        ArrayList arrayList = new ArrayList();
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("ddd");
        arrayList.add("ddd");

        System.out.println(arrayList);

        arrayList = singletest(arrayList);
        System.out.println(arrayList);
    }


    public static ArrayList singletest(ArrayList list){
        //1,定义一个集合的迭代器
        Iterator iterator = list.iterator();
        //2,创建一个新的list集合
        ArrayList arrayList1 = new ArrayList();
        //3,迭代list集合
        while (iterator.hasNext()){
            //4.定义 一个对象接收集合中的元素
            Object object = iterator.next();
            //5.判断新集合中是否有相同的元素,如果没有,则存进新的集合
            if (!arrayList1.contains(object)){
                arrayList1.add(object);
            }
        }
        return arrayList1;
    }
}
 
  


 
 


猜你喜欢

转载自blog.csdn.net/new_lichungang/article/details/78587739