java---List集合

1.List

List集合是Collection的子接口,方法大多相同

2.List 特有方法

(1)add(int index, E element),在指定位置添加指定元素,index <= size()&&index >= 0
(2)listIterator() 特有的遍历方法 【不会出现并发修改异常】

List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("b");
    ListIterator iterator = list.listIterator();
    while(iterator.hasNext()) {
        if (iterator.next() == "b") {
            iterator.add("c");//在遍历过程中添加元素使用这个方法
        }
    }
    System.out.println(list);
}

有iterator.hasPrevious()方法对集合进行反向遍历,但在使用此方法之前,必须将指针移动到最后一位
(3)get(int index)获取某位置的元素

3.List的子类
  • Vector
    大多数功能已经被ArrayList替代,底层数据结构是数组,线程安全,效率低,查询功能相对于ArrayList来说慢(线程安全),相对于LinkedList增删慢(数据结构为数组)
  • ArrayList
    底层数据结构是数组,线程不安全,效率高
  • LinkedList
    底层是链表实现的,查询慢,增删快
    【查询多用ArrayList,增删多用LinkedList,都多用ArrayList】
    (1)ArrayList中的注意事项:remove()与contain()方法底层依赖于equals()方法,有时可能会根据需求修改equals()方法
    例:删除自定义类中的重复元素
public static ArrayList single(ArrayList arrayList) {
        ArrayList arrayList1 = new ArrayList();
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Student student = (Student) iterator.next();
            if (!arrayList1.contains(student)) {
                arrayList1.add(student);
            }
        }
        return arrayList1;
    }
}
class Student {
    private String name;
    private int age;
    public Student(){}

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

    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 boolean equals(Object obj) {
        Student student = (Student)obj;
        return this.name.equals(student.name) && this.age == student.age;
    }
}

(2)LinkedList特有方法
addFirst(),一直从头添加,类似于链表的头插法
removeFirst(),removeLast(),从头或者从尾删除
get(int index)根据索引找到相关元素,底层从链表,效率比较慢
getFirst()和getLast()获取第一个元素和最后一个元素
例:利用LinkedList模拟栈结构

class NewStack {
    private LinkedList linkedList = new LinkedList();
    public void in(Object o) { //模拟进栈
        linkedList.add(o);
    }
    public Object out() {     //模拟弹栈
        return linkedList.removeLast();
    }
    public boolean isEmpty() {  //判断栈是否为空
        return linkedList.isEmpty();
    }
}

数组转集合:asList()

  • 数组转集合的好处:可是使用集合的思想去操作数组,可以使用集合中的方法,除了增删的方法外,必须是引用数据类型的数组才能用此函数进行转化
Integer[] arr = {11,22,33};  //如果是int数组,转化时会将整个数组看作一个对象
List<Integer> list = Arrays.asList(arr);
Iterator<Integer> integerIterator = list.iterator();
while (integerIterator.hasNext()) {
    System.out.println(integerIterator.next());
}

集合转数组:toArray()函数的参数如果是小于等于集合的size(),转化后的数组就和集合的长度一样,如果大于集合的size(),则分配的数组长度就和指定的数组长度相同。

4.ArrayList集合的嵌套
ArrayList<ArrayList<Person>> arrayLists = new ArrayList<>();
   ArrayList<Person> arrayList = new ArrayList<>();
   arrayList.add(new Person("张一",23));
   arrayList.add(new Person("张二",22));
   arrayList.add(new Person("张三",24));

   ArrayList<Person> arrayList1 = new ArrayList<>();
   arrayList1.add(new Person("李玉",34));
   arrayList.add(new Person("李煜",27));
   arrayList.add(new Person("张琪淋",20));

   arrayLists.add(arrayList);
   arrayLists.add(arrayList1);
    for (ArrayList<Person> a:arrayLists) {
        for(Person person :a) {
            System.out.println(person);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值