Java基础_集合_List与Set集合(笔记)

List

List集合概述

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

特点

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

特有方法

  • void add(int index,E element);在此集合中指定位置插入指定的元素
  • E remove(int index);删除指定索引的元素,返回被删除的元素
  • E set(int index,Eelement);修改指定索引的元素,返回被修改的元素
  • E get(int index);返回指定索引的元素

Listlterator

listerator:列表迭代器

  • 通过List集合的listIterator()方法得到,所以说它是list集合的迭代器
  • 用于允许程序员沿着任意方向遍历列表迭代器,在迭代的期间修改列表,病获得列表中迭代器的当前位置
        Iterator<Student> it = list.iterator();
        while (it.hasNext()) {
    
    
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }

listerator常用方法:

  • E next():返回迭代中的下一个元素
  • boolean hasNext();如果迭代具有更多元素则返回ture
  • E previous();返回列表中的上一个元素
  • boolean hasPrevious();如果此列表迭代器在相反的方向遍历列表时具有更多元素则返回ture
  • void add(E e);将特定的元素插入到列表中

Arraylist与Linkedlist

两者的异同

同:Arraylist与Linkedlist都是List的子类具有List的性质
异:

  • ArrayList:底层数据结构是数组,具有查询快,增删慢的性质
  • LinkedList:底层数据结构是链表,具有查询慢,增删快的性质

ArrayList

作用:

  • ArrayList是基于Object[]实现的,所以该只能装引用数据类型,基本数据类型要想装进集合,需要将基本数据类型进行类的包装。
  • 包装类中有将String类型转换为对应的基本数据类型的方法。

特点:

  • 有序的:按照添加的顺序
  • 不唯一:同一个元素可以装多次

构造方法

  • ArrayList list = new ArrayList(int 数组空间大小);
  • ArrayList list = new ArrayList();//数组默认开辟10块空间

LinkedList集合的特有功能

  • public void addFirst(E e);在开头插入指定元素
  • public void addLast(E e);将指定的元素追加到此列表的末尾
  • public E getFirst();返回列表中的第一个元素
  • public E getLast();返回此列表中的最后一个元素
  • public E removeFirst();从此列表中删除并返回第一个元素
  • public E removeFirst();从列表中删除并返回最后一个元素

Set

Set集合特点

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

哈希值

  • 哈希值:是JDK根据对象的地址或者字符串数字算出来的int类型的数值
    获取对象的哈希值:返回对象的哈希码值
    public int hashCode();

对象的哈希值特点:

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值不同。而重写hashCode方法,可以实现让不同对象的哈希值相同

HashSet集合特点

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不做任何保证,即存储和取出的元素一致
  • 没有带索引的方法,所以不能使用普通的for循环遍历
  • 由于是Set集合分,所以是不包括重复元素的集合
public class test02 {
    
    
    public static void main(String[] args) {
    
    
        HashSet<String> hs= new HashSet<String>();

        hs.add("李淳罡");
        hs.add("剑九黄");
        hs.add("王仙芝");
        hs.add("李淳罡");

        for(String s:hs){
    
    

            System.out.println(s);
        }
    }
}

在这里插入图片描述
添加元素的过程:
在这里插入图片描述注:为确保唯一性,需重写hashCode()和heequals()方法

LinkedHashSet集合

概括:

  • 继承hashSet类并实现Set接口
  • 底层数据结构是哈希表和链表

特点:

  • 哈希表和链表实现的Set接口,具有可预测的迭代次序
  • 由链表保证元素有序,即元素的储存和取出顺序是一致的
  • 由哈希表保证元素唯一,即没有重复的元素
    public static void main(String[] args) {
    
    
        //创建链表
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
        //添加数据
        linkedHashSet.add("hello");
        linkedHashSet.add("java");
        linkedHashSet.add("world");
        linkedHashSet.add("java");//重复数据不能存储
        //加强for循环遍历
        for (String s : linkedHashSet) {
    
    
            System.out.println(s);
        }
    }

在这里插入图片描述

TreeSet集合

概述:

  • 位于java.util包下,使用时需要导包
  • 间接实现了Set方法

特点:

  • 元素有序,是按照一定的规则进行排序,并非是指存储和取出的顺序,具体方法由构造方法决定
  • TreeSet();根据其元素的自然排序进行排序
  • TreeSet(Comparator comparator);根据指定比较器进行排序
  • 没有索引的方法,所以不能使用普通for循环
  • 由于实现了Set集合,所以不包含重复元素的集合

代码演示:

    public static void main(String[] args) {
    
    
        TreeSet<Integer> treeSet=new TreeSet<>();
        treeSet.add(30);
        treeSet.add(20);
        treeSet.add(40);
        treeSet.add(50);
        
        treeSet.add(20);

        for(Integer i:treeSet){
    
    
            System.out.println(i);
        }
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_63736489/article/details/122502229