Java List集合

List本身是Collection接口的子接口,具备了Collection的所有方法。ListIterator是List集合特有的迭代器。ListIterator it = list.listIterator;//取代Iterator it = list.iterator;

List有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。

    |--ArrayList底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。

    |--LinkedList底层的数据结构是链表,线程不同步,增删元素的速度非常快。

    |--Vector底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

 

可变长度数组的原理:

当元素超出数组长度,会产生一个新数组,将原数组的数据复制到新数组中,再将新的元素添加到新数组中。

ArrayList:是按照原数组的50%延长。构造一个初始容量为 10 的空列表。

Vector:是按照原数组的100%延长。

注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。


1,ArrayList遍历:
import java.util.*;
 
public classTest{
 public static void main(String[] args) {
     List<String> list=new ArrayList<String>();
     list.add("Hello");
     list.add("World");
     list.add("HAHAHAHA");
     //第一种遍历方法使用foreach遍历List
     for (String str : list) {            //也可以改写for(int i=0;i<list.size();i++)这种形式
        System.out.println(str);
     }
 
     //第二种遍历,把链表变为数组相关的内容进行遍历
     String[] strArray=new String[list.size()];
     list.toArray(strArray);
     for(int i=0;i<strArray.length;i++) //这里也可以改写为  foreach(String str:strArray)这种形式
     {
        System.out.println(strArray[i]);
     }
     
    //第三种遍历 使用迭代器进行相关遍历
     
     Iterator<String> ite=list.iterator();
     while(ite.hasNext())//判断下一个元素之后有值
     {
         System.out.println(ite.next());
     }
 }
}

2,ArrayList去除集合中字符串的重复值
package com.hpioneer.collection;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/7  19:03
 * @File: Demo_ArrayLits of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_ArrayLits
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_ArrayList {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("c");
        list.add("c");
        list.add("c");

        ArrayList newList = getSingle(list);
        System.out.println(newList);
    }

    public static ArrayList getSingle(ArrayList list) {
        ArrayList newList = new ArrayList<>();                    //1,创建新集合
        Iterator it = list.iterator();                            //2,根据传入的集合(老集合)获取迭代器

        while(it.hasNext()) {                                    //3,遍历老集合
            Object obj = it.next();                                //记录住每一个元素
            if(!newList.contains(obj)) {                        //如果新集合中不包含老集合中的元素
                newList.add(obj);                                //将该元素添加
            }
        }

        return newList;
    }
}
 3,LinkedList模拟栈
package com.hpioneer.collection;

import java.util.LinkedList;
import java.util.Stack;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:14
 * @File: Demo_LinkedList of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_LinkedList
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_LinkedList {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.addFirst("a");
        list.addFirst("b");
        list.addFirst("c");
        list.addFirst("d");
        list.addLast("e");
        System.out.println(list.get(0));
        System.out.println(list);
        while (!list.isEmpty()){
            System.out.println(list.removeLast());
        }

    }
}
4,ArrayList嵌套ArrayList
package com.hpioneer.collection;

import java.util.ArrayList;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:24
 * @File: Demo_ArrayLists of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_ArrayLists
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_ArrayLists {
    public static void main(String[] args) {
        ArrayList<ArrayList<Person>> list = new ArrayList<>();

        ArrayList<Person> first = new ArrayList<>();                //创建第一个班级
        first.add(new Person("杨幂", 30));
        first.add(new Person("李冰冰", 33));
        first.add(new Person("范冰冰", 20));

        ArrayList<Person> second = new ArrayList<>();
        second.add(new Person("黄晓明", 31));
        second.add(new Person("赵薇", 33));
        second.add(new Person("陈坤", 32));

        //将班级添加到学科集合中
        list.add(first);
        list.add(second);

        System.out.println(first);
        System.out.println(second);
        //遍历学科集合
        for(ArrayList<Person> a : list) {
            for(Person p : a) {
                System.out.println(p);
            }
        }
    }
}

引用的Person类为:

package com.hpioneer.collection;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:25
 * @File: Person of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Person
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Person {
    private String name;
    private int age;
    public Person() {
        super();

    }
    public Person(String name, int age) {
        super();
        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 String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    /*@Override
    public boolean equals(Object obj) {
        Person p = (Person)obj;
        return this.name.equals(p.name) && this.age == p.age;
    }*/
}

 

 
 
 

 

 
posted @ 2018-05-08 21:28  H+  阅读(2411)  评论(0编辑  收藏  举报