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;
    }*/
}

 

 
 
 

 

 

转载于:https://www.cnblogs.com/H---/p/9011056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值