# List 与 Set

本篇内容意在总结课上所学的知识并加以巩固,如有错误请立即联系我,谢谢!

  • 关于 Collection
  • 掌握 List 部分内容
  • 掌握 Set 部分内容
  • 迭代器
  • WeChat:a735690757
  • gmail:735690757carry@gmail.com

# 1,概述

在 Java 中,List 和 Set 接口都是继承自 Collection 接口。Collection 接口定义了一组通用的集合操作方法,而 List 和 Set 则分别扩展了 Collection 接口,以提供特定的集合行为。

# 2,Collection

在 Java 中,Collection 接口是一个集合框架的根接口,它定义了一组通用的集合操作方法,可以用于处理各种类型的集合。Collection 接口提供了一些常用的方法,如添加元素、删除元素、检查元素是否存在、迭代集合中的元素等。它是 Java 集合框架中最基本的接口,所有其他的集合接口都是扩展自 Collection 接口。

Collection 接口定义了如下方法(常用、不完全):

  • boolean add (E e): 将元素添加到集合中,并返回是否添加成功。
  • boolean addAll (Collection<? extends E> c): 将指定集合中的所有元素添加到该集合中,并返回是否添加成功。
  • boolean remove (Object o): 从集合中删除指定元素,并返回是否删除成功。
  • void clear (): 清空集合中的所有元素。
  • boolean isEmpty (): 检查集合是否为空。
  • int size (): 返回集合中元素的数量。

# 3,List

Java 中的 List 是一种常见的集合类,用于存储一组元素。List 是一个接口,它有多个实现类,如 ArrayList、LinkedList 等。

!重要!

  1. 允许存储重复的元素。

  2. 元素按照插入顺序有序存储。

  3. 可以通过索引访问 List 中的元素,索引从 0 开始。

  4. List 可以动态调整大小,即添加或删除元素。

    有序,可重复

# 3.1 ArrayList

List 的常用方法(可能不完全):(类似数组)

  1. add (element):向 List 末尾添加元素。
  2. add (index, element):在指定索引位置插入元素。
  3. remove (index):删除指定索引位置的元素。
  4. get (index):返回指定索引位置的元素。
  5. set (index, element):替换指定索引位置的元素。
  6. size ():返回 List 的大小。
  7. contains (element):判断 List 是否包含指定元素。
  8. indexOf (element):返回指定元素在 List 中第一次出现的索引位置。
  9. clear ():清空 List 中的所有元素。
import java.util.ArrayList;
import java.util.List;
public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        System.out.println(list); // 输出:[apple, banana, orange]
        list.remove(1);
        System.out.println(list); // 输出:[apple, orange]
        String fruit = list.get(1);
        System.out.println(fruit); // 输出:orange
        list.set(1, "grape");
        System.out.println(list); // 输出:[apple, grape]
    }
}

以上代码由 [ChatGPT Mar 14 Version] 生成。

package edu.beihua.KarryCode.listEX001.test;
import edu.beihua.KarryCode.listEX001.entity.news;
import java.util.ArrayList;
public class test_for_ArrayList {
    public static void main(String[] args) {
        /*
        * add ()     ---- 增加对象
        * get ()     ---- 获取对象
        * 非泛型返回 Object
        * isEmpty () ---- 判空
        * clear ()   ---- 清除
        * iterator ()---- 迭代器
        * toArray () ---- 转为数组
        * */
        news newslkr = new news(1,"timu1","lkr");
        news newsffl = new news(2,"timu2","ffl");
        news newslqr = new news(3,"timu3","lqr");
        news imnews = new news(4,"hexin","!!!!!");
        ArrayList<news> arrayList = new ArrayList<news>();
        arrayList.add(newslkr);                                     // 普通追加
        arrayList.add(newsffl);
        arrayList.add(newslqr);
         arrayList.add(0,imnews);                              // 标记追加
        System.out.println("______________标题数目输出______________");
        System.out.println("新闻有"+arrayList.size()+"条");
        System.out.println("______________标题输出______________");
        for (int i=0;i<arrayList.size();i++){
            System.out.println(arrayList.get(i).getTitle());          // 不适用非泛型,可以使用(Object)强制转换,(news)进行匹配
        }
        System.out.println("______________标题输出____________");
        for(Object obj:arrayList){                                  //** 增强形态的 For**
            news newst = (news) obj;
            System.out.println(newst.getTitle());
        }
        System.out.println("______________标题输出____________");
        for(news news:arrayList){                                  //** 增强形态的 For**|| 最终版:面向对象
            System.out.println(news.getTitle());
        }
        System.out.println("________________标题判断__________");
        System.out.println(arrayList.contains(newslqr));
        arrayList.remove(3);
        System.out.println("______________标题输出____________");
        for(news news:arrayList){                                  //** 增强形态的 For**|| 最终版:面向对象
            System.out.println(news.getTitle());
        }
        System.out.println("______________标题判断__________");
        System.out.println(arrayList.contains(newslqr));
        System.out.println("________________清空_______________");
        arrayList.clear();
        System.out.println(arrayList.isEmpty());
    }
}

以上代码为上课所写(丑丑的 www)。

# 3.2 LinkedList

LinkedList 具有以下特点:

  1. 随机访问元素效率较低,因为需要遍历链表。
  2. 在链表的开头或结尾插入、删除元素的效率较高。
  3. 占用的内存空间相对较小。

有趣的方法:

  • getFirst ():返回链表的第一个元素。
  • getLast ():返回链表的最后一个元素。
  • removeFirst ():删除链表的第一个元素。
  • removeLast ():删除链表的最后一个元素。
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        System.out.println(list); // 输出:[apple, banana, orange]
        list.remove(1);
        System.out.println(list); // 输出:[apple, orange]
        String fruit = list.get(1);
        System.out.println(fruit); // 输出:orange
        list.set(1, "grape");
        System.out.println(list); // 输出:[apple, grape]
    }
}

以上代码由 [ChatGPT Mar 14 Version] 生成。

package edu.beihua.KarryCode.listEX001.test;
import edu.beihua.KarryCode.listEX001.entity.news;
import java.util.Iterator;
import java.util.LinkedList;
public class test_for_LinkList {
    public static void main(String[] args) {
        news newslkr = new news(1,"timu1","lkr");
        news newsffl = new news(2,"timu2","ffl");
        news newslqr = new news(3,"timu3","lqr");
        news imnews = new news(4,"hexin","!!!!!");
        LinkedList list = new LinkedList();         // 父父 new 子这种只能使用父子公用的方法
        list.add(newslkr);                                     // 普通追加
        list.add(newsffl);
        list.add(newslqr);
        list.remove(0);
        list.add(0,imnews);
        System.out.println("______________内容输出____________");
        for(Object obj:list){
            news s = (news) obj;
            System.out.println(s.getTitle());
        }
        news tyu = (news)list.getFirst();
        System.out.println(tyu.getNo());
        news imnews666 = new news(10,"hexin66666","!!66666!!!");
        list.addFirst(imnews666);
        System.out.println("______________内容输出____________");
        for(Object obj:list){
            news s = (news) obj;
            System.out.println(s.getTitle());
        }
        news re = (news)list.removeLast();
        System.out.println(re.getData());
        System.out.println(list.size());
        Iterator iterator = list.iterator();
        System.out.println("_________________________");
        while (iterator.hasNext()){
            news news = (news) iterator.next();
            System.out.println(news.getTitle());
        }
    }
}

# 4,Set

在 Java 中,Set 是一种集合(Collection)类型,它是一组不允许包含重复元素的对象。Set 是通过哈希表(hash table)实现的,因此它没有顺序,也不能通过索引访问其中的元素。Set 接口继承自 Collection 接口,并添加了一些独有的方法。

无序,唯一

Java 中常用的 Set 类有以下几种:

  1. HashSet:基于哈希表实现,具有良好的插入和查询性能,但不保证元素的顺序。
  2. TreeSet:基于红黑树实现,元素按照自然顺序排序或指定的 Comparator 顺序排序。
  3. LinkedHashSet:基于哈希表和链表实现,保证元素按照插入顺序排列。

Set 的常用方法包括:

  1. add (element):向集合中添加元素。
  2. remove (element):从集合中删除指定元素。
  3. contains (element):判断集合中是否包含指定元素。
  4. size ():返回集合中元素的数量。
  5. isEmpty ():判断集合是否为空。
  6. clear ():清空集合中的所有元素。

例如,以下是使用 HashSet 和 TreeSet 实现的 Set 的示例:

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetExample {
    public static void main(String[] args) {
        Set<String> hashSet = new HashSet<>();
        hashSet.add("apple");
        hashSet.add("banana");
        hashSet.add("orange");

        System.out.println(hashSet); // 输出:[orange, banana, apple]

        hashSet.remove("banana");
        System.out.println(hashSet); // 输出:[orange, apple]

        System.out.println(hashSet.contains("orange")); // 输出:true

        Set<String> treeSet = new TreeSet<>();
        treeSet.add("apple");
        treeSet.add("banana");
        treeSet.add("orange");

        System.out.println(treeSet); // 输出:[apple, banana, orange]

        treeSet.remove("banana");
        System.out.println(treeSet); // 输出:[apple, orange]

        System.out.println(treeSet.contains("orange")); // 输出:true
    }
}

以上代码由 [ChatGPT Mar 14 Version] 生成。

# 4.1 HashSet

在 Java 中,HashSet 是一种基于哈希表实现的 Set 集合,它不保证元素的顺序,但是可以快速地插入和查找元素。HashSet 使用哈希函数将元素映射到哈希表中的桶(bucket)中,桶是一个链表或树结构,用于解决哈希冲突(即不同元素映射到同一个桶中的情况)。

HashSet 的特点包括:

  1. 不保证元素的顺序。
  2. 不允许集合中存在重复元素。
  3. 允许 null 元素。
package edu.beihua.KarryCode.listEX001.test;
import edu.beihua.KarryCode.listEX001.entity.news;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Objects;
import java.util.Set;
public class test_foe_HashSet {
    public static void main(String[] args) {
        /*
        * 无论什么 List 还是 Set 均为 Cll... 的继承类,其均具有父类的方法
        * Set 中存放的是对象的引用,相同的引用是互斥的只能添加一次
        * equals () 方法可以被重写
        * Set 是无序的,不存在 Function(index,XXX)类似如此的有序号的的方法,且只能使用增强型的 for 进行循环输出 */
        Set set = new HashSet();
        news newslkr = new news(1,"timu1","lkr");
        news newsffl = new news(2,"timu2","ffl");
        news newslqr = new news(3,"timu3","lqr");
        set.add(newslkr);                                     // 普通追加
        set.add(newsffl);
        set.add(newslqr);
        for(Object obj:set){
            news test = (news) obj;
            System.out.println(test.getData());
        }
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            news test = (news) iterator.next();
            System.out.println(test.getData());
        }
    }
}

# 5,Iterator 迭代器

在 Java 中,Iterator 是一个用于遍历集合(Collection)元素的接口,它提供了一种统一的访问集合中元素的方式。通过 Iterator,我们可以遍历集合中的每个元素,而不需要知道集合的具体实现方式。

Iterator 接口包含了以下方法:

  1. hasNext ():判断集合中是否还有下一个元素。
  2. next ():返回集合中的下一个元素。
  3. remove ():从集合中移除通过 next () 方法返回的最后一个元素。

Iterator 的工作原理是,首先通过集合的 iterator () 方法获得一个 Iterator 对象,然后使用 hasNext () 和 next () 方法遍历集合中的元素,最后使用 remove () 方法从集合中移除元素。

在 4.1HashSet 中用到了本迭代器,以下为关键语句:

Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            news test = (news) iterator.next();
            System.out.println(test.getData());
        }
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KarryLiu 微信支付

微信支付

KarryLiu 支付宝

支付宝