Collection,List,ArrayList,LinkedList集合

在这里插入图片描述

Collection集合

是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

lJDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

Collection集合对象
package com.itxuexi.it14.Collection01;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo01 {
    public static void main(String[] args) {
        //创建Collection集合对象 ,指向ArrayList子类
        Collection<String> c = new ArrayList<String>();
        
        //创建Collection集合对象 ,指向LinkedList子类
        Collection<String> d = new ArrayList<String>();

        //添加对象
        c.add("hello");
        c.add("world");
        
		d.add("hello");
        d.add("java");

        //输出集合对象
        System.out.println(c);
        System.out.println(c);

    }
}

Collection集合常用方法
package com.itxuexi.it14.Collection01;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo02 {
    public static void main(String[] args) {
        //创建集合对象
        Collection<String> c = new ArrayList<String>();

        //添加对象,返回boolean类型,可重复,返回true
        System.out.println(c.add("hello"));   // true
        System.out.println(c.add("hello"));   // true
        System.out.println(c.add("world"));   // true

        //移除指定元素,返回boolean类型,
        System.out.println(c.remove("hello"));

        //清除集合
//        c.clear();
        System.out.println();

        //判断集合中是否有指定元素
        System.out.println(c.contains("word"));

        //判断集合是否为空,为空返回true
        System.out.println(c.isEmpty());

        //集合中元素的个数  
        System.out.println(c.size());

    }
}

Collection集合遍历(Iterator迭代器)

Iterator 迭代器,集合的专用遍历方式;Iterator 是接口。迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的

Iterator中的常用方法:

lE next():返回迭代中的下一个元素

lboolean hasNext():如果迭代具有更多元素,则返回 true;

Collection遍历循环

Collection集合没有获取元素的方法,无法通过for循环获取元素(增强版 for循环获取为地址;需要在Student中加toString方法)


package com.itxuexi.it14.Collection01;

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

public class CollectionDemo03 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<String>();

        //添加元素
        c.add("hello");
        c.add("world");
        c.add("java");
        
//        增强for循环
//        for(String s : str){
//            System.out.println(s);
//        }

        Iterator<String> it = c.iterator();

        //用while循环,hasNext()判断集合中是否有元素 (trun循环,false终止)
        while (it.hasNext()){
            //使用next() 获取元素 ,没有元素会报错NoSuchElementException
            String s = it.next();
            System.out.println(s);
      }
    }
}
练习题
package com.itxuexi.it14.Collection02;
/*
学生类
 */
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
 //-----------------------------------------------
package com.itxuexi.it14.Collection02;
/*
测试类
 */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionDemo {
    public static void main(String[] args) {
        //创建Collection集合对象
        Collection<Student> str = new ArrayList<Student>();

        //创建学生对象
        Student s1 = new Student("张玲",20);
        Student s2 = new Student("王辉",19);
        Student s3 = new Student("刘军",22);

        //把学生添加到集合
        str.add(s1);
        str.add(s2);
        str.add(s3);
        
        
//        for(Student s : str){
//            System.out.println(s);
//        }

        //遍历集合(迭代器)
        Iterator<Student> it = str.iterator();
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }

    }
}
List – 有序,可重复,接口

有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元 素,并搜索列表中的元素 ;与Set集合不同,列表通常允许重复的元素

List集合概述

有索引,可以存储重复元素 ,元素存取有序

List集合对象 (ArrayList,LinkedList或对象)
package com.itxuexi.it14.List01;

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

public class ListDemo1 {
    public static void main(String[] args) {
        //创建集合对象 子类ArrayList
        List<String> li = new ArrayList<String>();
        //创建集合对象 子类LinkedList
        List<String> ll = new LinkedList<String>();

        //添加元素  (可重复)
        li.add("hello");
        li.add("word");
        li.add("word");
        li.add("java");
        System.out.println(li);  //有序
        
        ll.add("hello");
        ll.add("word");

        //循环获取元素  ,List继承Iterator 可用他的方法
        Iterator<String> it = li.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }
}
List集合特有方法
方法名说明
void add(int index,E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素
package com.itxuexi.it14.List01;

import java.util.ArrayList;
import java.util.List;

public class ListDemo2 {
    public static void main(String[] args) {
        //创建集合对象
        List<String> li = new ArrayList<String>();

        //添加元素
        li.add("hello");
        li.add(1,"world");  //注意索引越界
        li.add("java");
        li.add("javaee");

        //输出集合对象
        System.out.println(li);

        //删除元素,返回被删除的元素
        li.remove("hello");
        li.remove(0);    //注意索引越界
        System.out.println(li);

        //修改元素,返回被修改的元素
        System.out.println(li.set(0,"get"));

        //返回指定位置元素
        System.out.println(li.get(0));

        //用循环获取集合元素
        for(int i = 0;i<li.size();i++){
            String s = li.get(i);
            System.out.println(s);
        }

    }
}

并发修改异常 与 ListIterator迭代器
并发修改异常

并发修改异常:ConcurrentModificationException

产生原因:迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致

解决方案:用for循环遍历或使用ListIterator迭代器

package com.itxuexi.it14.List03;

// ConcurrentModificationException :并发修改异常
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> li = new ArrayList<String>();

        //添加元素
        li.add("hello");
        li.add("world");
        li.add("java");

        /*
        //遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,我就添加一个"javaee"元素
        //next 迭代器中预期修改次数与实际修改次数不一致(add操作)
        Iterator<String> it = li.iterator();
        while (it.hasNext()){
            String s = it.next();
            if(s.equals("world")){
                li.add("javaee");
            }
        }
         */

        for(int i = 0;i<li.size();i++){
            String s = li.get(i);
            if(s.equals("world")){
                li.add("javaee");
            }
        }
        System.out.println(li);

    }
}

ListIterator迭代器

通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器 用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。

package com.itxuexi.it14.List03;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratoDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> li = new ArrayList<String>();

        //给集合添加元素
        li.add("hello");
        li.add("world");
        li.add("java");
        li.add("1234");

        System.out.println(li);

        //获取列表迭代生成器;在迭代器中增加元素
        ListIterator<String> lit = li.listIterator();
        while (lit.hasNext()){
            String s = lit.next();
            if (s == "world"){
                lit.add("javaee");
            }
        }
        System.out.println(li);

    }
}

遍历练习题(迭代器iterator;普通for;增强for)

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

package com.itxuexi.it14.List04;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

//----------------------------------------------------------------------------

package com.itxuexi.it14.List04;

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

public class StudentDemo {
    public static void main(String[] args) {
        //创建集合
        List<Student> li = new ArrayList<Student>();

        //实例化学生类
        Student s1 = new Student("李静",15);
        Student s2 = new Student("王玉",14);
        Student s3 = new Student("贺语",17);

        //往集合中添加元素
        li.add(s1);
        li.add(s2);
        li.add(s3);

        //迭代器 iterator ;集合特有的遍历方式
        Iterator<Student> it = li.iterator();
        while(it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }

        System.out.println("----------------------------");

        //普通for :带有索引的遍历方式
        for(int i =0;i<li.size();i++){
            Student sf = li.get(i);
            System.out.println(sf.getName() + "," + sf.getAge());
        }

        System.out.println("-----------------------------");
        //增强for :最方便的遍历方式
        for(Student i : li){
            System.out.println(i.getName() + "," + i.getAge());
        }

    }
}
数据结构

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合

通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率

数据结构之栈和队列

栈结构:先进后出 (进栈ABCD 出栈DCBA)

队列结构:先进先出 (入队列ABCD 出队列ABCD )

数据结构之数组和链表

数组结构:查询快、增删慢

队列结构:查询慢、增删快

List集合的实现类
List集合子类的特点

ArrayList集合:底层是数组结构实现,查询快、增删慢

LinkedList集合:底层是链表结构实现,查询慢、增删快

ArrayList/LinkedList遍历(迭代器iterator;普通for;增强for)
package com.itxuexi.it14.List04;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

//------------------------------------------------------------------

package com.itxuexi.it14.List04;

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

public class StudentArray {
    public static void main(String[] args) {
        //创建arraylist集合
        ArrayList<Student> arr = new ArrayList<Student>();

        //实例化学生对象
        Student s1 = new Student("赵谦",15);
        Student s2 = new Student("钱慧",17);
        Student s3 = new Student("孙俞",16);

        //将学生添加到集合中
        arr.add(s1);
        arr.add(s2);
        arr.add(s3);

        //iterator迭代器
        Iterator<Student> it = arr.iterator();
        while(it.hasNext()){
            Student si = it.next();
            System.out.println(si.getName() + "," + si.getAge());
        }

        System.out.println("---------------------------------------");

        //for循环
        for(int i =0;i<arr.size();i++){
            Student sf = arr.get(i);
            System.out.println(sf.getName() + "," + sf.getAge());
        }

        System.out.println("------------------------------------------");

        //for加强版
        for(Student i : arr){
            System.out.println(i.getName() + "," + i.getAge());
        }

    }
}

LinkedList集合特有功能
方法名说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素
package com.itxuexi.it14.List03;

import java.util.ArrayList;
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        //创建LinkedList集合
        LinkedList<String> ll = new LinkedList<String>();

        //添加元素
        ll.add("hello");

        //在该列表开头插入指定的元素
        ll.addFirst("hi");

        //将指定的元素追加到此列表的末尾
        ll.addLast("end");

        System.out.println(ll);

        // 返回此列表指定索引元素
        System.out.println(ll.get(1));

        // 返回此列表中的第一个元素
        System.out.println(ll.getFirst());

        // 返回此列表中的最后一个元素
        System.out.println(ll.getLast());
        
        //删除元素
        System.out.println(ll.remove(1));
        System.out.println(ll.remove("hi"));

        //从此列表中删除并返回第一个元素
        System.out.println(ll.removeFirst());

        //从此列表中删除并返回最后一个元素
        System.out.println(ll.removeLast());

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岿然如故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值