Collection集合

Collection集合

概述

  • 是单列集合的顶层接口,它表示一组对象,这些对象也成为Collection的元素
  • JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

创建Collection集合的对象

  • 多态的方式
  • 具体的实现类ArrayList

Collection集合常用方法

方法名 说明
boolean add(E e) 添加元素
boolean remove(Object o) 移出指定元素
void clean() 清空元素
boolean contains(Object o) 判断集合中是否存在指定元素
int size() 集合长度
boolean isEmpty() 判断集合是否为空

 

🌰

import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        Collection<String> c = new ArrayList<String>();
 /*
   Ctrl + B 可以查看类的信息
   Alt + 7 打开一个窗口能看类的所有信息
 */
     //add方法永远返回的是true,因为add方法里只有return true
      c.add("Hello");
      c.add("World");
  System.out.println(c.remove("World"));//存在即移出返回true
  System.out.println(c.remove("java"));//不存在返回false

  System.out.println(c.contains("Hello"));//判断是否存在Hello

  System.out.println(c.size());
  
  c.clear();

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

}

 

迭代器 iterator(集合专用遍历方式)

迭代器是一个接口,返回值类型也是一个迭代器

  • iterator<E>iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
  • 迭代器是通过集合iterator()方法得到的,所以它是依赖于集合存在的

iterator中常用方法

方法名 说明
E next() 返回迭代器中下一个元素
boolean hasNext() 如果迭代具有更多元素,返回true

 

🌰

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
public class iteratorDemo {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<String>();
        c.add("Hello");
        c.add("World");
        c.add("javaee");
    //iterator&lt;E&gt; iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
    Iterator&lt;String&gt; it = c.iterator();

    while(it.hasNext()){
        String s = it.next();//不是直接输出it.next()而是用一个s接收,是为了方便其他操作
        System.out.println(s);
    }
}

}

List集合

List集合是Collection集合的接口,也就是说Collection集合中的方法List集合都能使用

List集合概述

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

List集合特点

  • 有序:存储和取出的元素顺序一致
  • 可重复:存储的元素可以重复

🌰

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        //添加元素
        list.add("Hello");
        list.add("World");
        list.add("java");//顺序存储
        list.add("World");//可重复存储
        //输出集合对象
        System.out.println(list);
    //迭代器方法遍历
    Iterator&lt;String&gt; it = list.iterator();
    while(it.hasNext()){
        String s= it.next();
        System.out.println(s);
    }
}

}

List集合特有方法

它爹Collection没有的,它儿子ArrayList有的

方法名 说明
void add(int index,E element) 指定位置插入指定元素
E remove(int index) 删除指定索引处元素,返回被删除元素
E set(int index,E element) 修改指定索引处元素,返回被修改元素
E get(int index) 返回指定索引处元素

 

🌰

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        //添加元素
        list.add("Hello");
        list.add("World");
        list.add("java");//顺序存储
        list.add("World");//可重复
    list.add(2,"good");//从0开始,不能越界
    list.set(0,"wow");//修改指定索引元素,不能越界
    String a = list.get(3);//返回指定索引元素,不能越界
    System.out.println(a);
    //输出集合对象
    System.out.println(list);

    list.remove("World");//顺序删除
    list.remove(1);//索引删除,不能越界

    //迭代器方法遍历
    Iterator&lt;String&gt; it = list.iterator();
    while(it.hasNext()){
        String s= it.next();
        System.out.println(s);
    }
    System.out.println("-------------");
    //用for循环改进遍历
    for(int i = 0; i &lt; list.size();i++){
        String s = list.get(i);                      
        System.out.println(s);
    }
}

}

 

🌰List集合存储学生对象并遍历

//1.定义学生类
//2.创建List集合
//3.创建学生对象
//4.把学生添加到集合
//5.遍历集合(迭代器、for循环)
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class ListDemo {
    public static void main(String[] args) {
        //创建List集合对象
        List<Student> list = new ArrayList<Student>();
    //创建学生对象
    Student s1 = new Student("lxx",18);
    Student s2 = new Student("mtt",18);
    Student s3 = new Student("lho",18);
    Student s4 = new Student("lbl",18);
    Student s5 = new Student("hxq",18);

    //把学生添加到集合
    list.add(s1);
    list.add(s2);
    list.add(s3);
    list.add(s4);
    list.add(s5);

    //迭代器遍历
    Iterator&lt;Student&gt; it = list.iterator();
    while(it.hasNext()){
        Student s = it.next();
        System.out.println(s.getName() + "," + s.getAge());
    }
    System.out.println("--------");

    //for循环遍历
    for(int i = 0; i &lt; list.size();i++){
        Student s = list.get(i);
        System.out.println(s.getName() + "," + s.getAge());
    }
}

}

列表迭代器ListIterator <E>
继承自Iterator,所以可以直接使用next()和hasNext()

用于允许程序员沿任意方向遍历列表的列表迭代器,可以在迭代期间修改列表,并获取列表中迭代器的当前位置

列表迭代器常用方法

方法名 说明
E next() 返回迭代器中下一个元素
boolean hasNext() 如果迭代有更多元素,返回true
E previous() 返回列表中上一个元素
boolean hasPrevious() 如果此列表迭代器在相反方向遍历列表时具有更多元素,返回true
void add(E e) 插入指定元素

 

🌰

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

public class listIteratorDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();

    list.add("Hello");
    list.add("World");

    ListIterator&lt;String&gt; lit = list.listIterator();

    //正向遍历
    while(lit.hasNext()){
        String s = lit.next();
        System.out.println(s);
    }
    System.out.println("-------------");

    //逆向遍历
    while(lit.hasPrevious()){
        String s = lit.previous();
        System.out.println(s);
    }
    while(lit.hasNext()){
        String s = lit.next();
        if(s.equals("World")) {
            lit.add("javaee");//用列表迭代器的添加方法,不会报错
        }
    }
    //直接遍历
    System.out.println(list);
}

}

 

增强for循环
简化数组和Collection集合的遍历

  • 实现iterable接口的类允许其对象成为增强型for语句的目标
  • JDK5之后出现的,其内部原理是一个迭代器

格式

for(元素数据类型变量名:数组/Collection集合){
 //在此处使用变量即可,该变量就是元素
} 
 🌰
 int[] arr = {1,2,3,4,5};
 for(int i:arr){
   System.out.println(i);
 }

三种遍历

//迭代器遍历,集合特有的遍历方式
Iterator<Student> it = list.iterator();
while(it.hasNext()){
  Student s = it.next();
  System.out.println("s.getName()" + "," + s.getAge());
}
//普通for,有索引的遍历方式
for(int i = 0;i < it.size();i++){
  Student s = list.get(i);
  System.out.println(s.getName() + "," + s.getAge());
}
//增强for,最方便的遍历方式
for(Student s : list){
  System.out.pritnln(s.getName() + "," + s.getAge());
}

List集合子类特点

List集合常用子类:ArrayList、LinkedList

  • ArrayList:底层数据结构是数组,查询快、增删慢
  • LinkedList:底层数据结构是链表,查询慢、增删快

🌰

//创建ArrayList和LinkedList对象并用三种方式遍历
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Iterator;
public class ListDemo {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();
        array.add("hello");
        array.add("world");
        array.add("java");
        for(String s :array) {
            System.out.println(s);
        }
        System.out.println("---------------");
        for(int i = 0 ;i < array.size();i++){
            String s = array.get(i);
            System.out.println(s);
        }
        System.out.println("-----------------");
        Iterator<String> it = array.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-------------");
    LinkedList&lt;String&gt; link = new LinkedList&lt;&gt;();
    link.add("hello");
    link.add("world");

    for(String s :link){
        System.out.println(s);
    }
    System.out.println("-------------");
    for(int i = 0;i &lt; link.size();i++){
        String s = link.get(i);
        System.out.println(s);
    }
    System.out.println("-------------");
    Iterator&lt;String&gt; tt = link.iterator();
    while(tt.hasNext()){
        String s = tt.next();
        System.out.println(s);
    }
}

}

LinkedList集合的特有功能

方法名 说明
public void addFirst(E e) 表头插入指定元素
public void addLast(E e) 表尾插入指定元素
public E getFirst() 返回列表第一个元素
public E getLast() 返回列表最后一个元素
public E removeFirst() 删除列表第一个元素并返回
public E removeLast() 删除列表最后一个元素并返回

 

🌰

import java.util.LinkedList;

public class LinkedListDemo {
public static void main(String[] args) {
//创建集合对象
LinkedList<String> link = new LinkedList<String>();
//添加元素
link.add("hello");
link.add("world");
//输出集合
System.out.println(link);
System.out.println("----------------");
link.addFirst("First");//表头添加
link.addLast("Last");//表尾添加
System.out.println(link);
System.out.println("----------------");
String first = link.getFirst();//获取表头
String last = link.getLast();//获取表尾
System.out.println(first);
System.out.println(last);
System.out.println("----------------");

    String delFirst = link.removeFirst();//删除表头
    String delLast = link.removeLast();//删除表尾巴
    System.out.println(link);
}

}

 

Set集合

public interface Set< E > extends Collection<E>

  • 不包含重复元素
  • 没有带索引的方法,所以不能使用普通for循环

🌰

import java.util.HashSet;
//HashSet:对集合的迭代顺序不做任何保证
import java.util.Set;
public class SetDemo {
    public static void main(String[] args) {
        //创建集合对象,Set是一个接口不能直接创建对象
        Set<String> set = new HashSet<String>();//采用哈希表实现
        set.add("hello");
        set.add("world");
        set.add("java");
        set.add("world");//只会显示一个world,不包含重复元素
    for(String s:set){
        System.out.println(s);//结果是:word java hello,因为HashSet不保证迭代顺序
    }
}

}

 

HashSet

HashSet集合特点

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不做保证,就是不保证存储和取出的元素顺序一致
  • 没有带索引的方法,不能使用普通for循环遍历
  • 由于是Set集合,所以不包含重复元素
posted @ 2021-11-30 20:35  月豕  阅读(81)  评论(0)    收藏  举报