Java集合---List和Set

一.List集合

  1. List接口

    java.util.list接口继承自Collection接口,是一种单列集合。

    List集合主要特点是:允许出现重复的元素,元素是有序的,存入和取出的顺序是一样的,是以一种线性方式进行存储的,能够用索引来访问集合中的元素。

  2. List接口常用的方法
    • public void add(int index, E element):在列表中指定的位置上插入指定的元素。
    • public E get(int index):返回此列表中指定位置的元素
    • public E remove(int index):移除此列表中指定位置的元素
    • public E set(int index, E element):用指定元素替换此列表中指定位置的元素
    public class ListDemo1 {
        public static void main(String[] args) {
            List<Integer> list = new ArrayList<>();
    
            list.add(1);
            list.add(3);
            list.add(2);
            // 在指定位置添加add
            list.add(2,4);
            System.out.println(list);   // 输出:[1, 3, 4, 2]
    
            // 删除remove
            list.remove(2);
            System.out.println(list);   // 输出:[1, 3, 2]
    
            // 修改set
            list.set(0,11);
            list.set(2,22);
            System.out.println(list);   // 输出:[11, 3, 22]
    
            // 获取List数据 get
            for (int i = 0; i < list.size(); i++) {
                System.out.print(list.get(i) + " ");    // 输出:11 3 22
            }
        }
    }
  3. List的子类
    • ArrayList集合

      ArrayList集合存储的结构是数组结构,元素增删慢,查找快,主要多用于查询数据和遍历数据。

    • LinkedList集合

      LinkedList集合存储的结构是链表结构,元素添加,删除快

      LinkedList是一个双向链表,既继承了List的方法,LinkedList提供许多首尾操作的方法,主要有以下一些:

      • public void addFirst(E e):在此列表的开始处插入指定的元素。
      • public void addLast(E e):将指定的元素插入列表的尾部。
      • public E getFirst():返回此列表中的第一个元素。
      • public E getLast():返回此列表中的最后一个元素。
      • public E removeFirst():移除并返回此列表中第一个元素。
      • public E removeLast():移除并返回此列表的最后一个元素。
      • public E pop():从这个列表所表示的堆栈中弹出一个元素。
      • public void push(E e):将一个元素压栈到该列表所表示的堆栈上。
      public class ListDemo2 {
          public static void main(String[] args) {
              LinkedList<String> linkedList = new LinkedList<>();
              // 添加元素
              linkedList.addFirst("张三");
              linkedList.addFirst("李四");
              linkedList.addFirst("王五");
              System.out.println(linkedList); // 输出:[王五, 李四, 张三]
              // 获取元素
              System.out.println(linkedList.getFirst()); // 输出:王五
              System.out.println(linkedList.getLast());  // 输出:张三
              // 删除元素
              System.out.println(linkedList.removeLast()); // 输出:张三
              System.out.println(linkedList); // 输出:[王五, 李四]
      
              System.out.println(linkedList.removeFirst());   // 输出:王五
              System.out.println(linkedList); // 输出:[李四]
      
              // 压栈
              linkedList.push("赵六");
              System.out.println(linkedList); // 输出:[赵六, 李四]
      
              // 出栈
              System.out.println(linkedList.pop()); // 输出:赵六
          }
      }

二.Set集合

  1. Set接口

    java.util.Set接口继承自Collection接口,方法Collection中的基本一致,没有做功能的扩充,只是对于Collection接口来说,Set接口更加严格。

    Set接口的特点:元素无序,没有索引。

    因为Set集合是无序的并且没有索引,所以取出Set集合的元素可以采用迭代器或者增强for

    Set集合子类有多个,这里主要介绍两个:java.util.HashSetjava.util.LinkedHashSet.

  2. Set集合子类
    • HashSet

      HashSet是根据对象的哈希值来确定元素在集合中的存储位置的,因此具有比较良好的存储和查找性能

      HashSet保证元素的唯一性主要依赖于:hashCode和equals方法

      如果集合存储的是自定义对象,要保证元素唯一,就必须重写hashCode和equals方法。

      示例:HashSet存储基本元素

      public class HashSetDemo {
          public static void main(String[] args) {
              HashSet<String> hs = new HashSet<>();
      
              hs.add("张三");
              hs.add("李四");
              hs.add("王五");
              System.out.println(hs); // 输出:[李四, 张三, 王五]
      
              // 遍历元素
              for (String s : hs) {
                  System.out.print(s + " ");
              } // 输出: 李四 张三 王五
          }
      }

      示例:HashSet存储自定义对象

      1.先创建自定义对象(保证元素唯一,需要重写hashCode方法和equals方法)

      import java.util.Objects;
      
      public class Student {
          private String name;
          private int id;
      
          public Student() {
          }
      
          public Student(String name, int id) {
              this.name = name;
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public int getId() {
              return id;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          @Override
          public boolean equals(Object o) {
              if (this == o) return true;
              if (o == null || getClass() != o.getClass()) return false;
              Student student = (Student) o;
              return id == student.id &&
                      Objects.equals(name, student.name);
          }
      
          @Override
          public int hashCode() {
              return Objects.hash(name, id);
          }
      
          @Override
          public String toString() {
              return "Student{" +
                      "name='" + name + '\'' +
                      ", id=" + id +
                      '}';
          }
      }
      

      2.Set集合存储

      public class SetDemo1 {
          public static void main(String[] args) {
              // 1. 创建集合
              HashSet<Student> hs = new HashSet<>();
              // 2. 创建Student对象
              Student st1 = new Student("张三", 1);
              Student st2 = new Student("李四", 2);
              Student st3 = new Student("王五",3);
              Student st4 = new Student("张三",1);
              Student st5 = new Student("李四", 5);
              // 3. 集合添加元素
              hs.add(st1);
              hs.add(st2);
              hs.add(st3);
              hs.add(st4);
              hs.add(st5);
              // 4. 打印输出
              for (Student s: hs) {
                  System.out.println(s);
              }
              // 输出:
              /*
              Student{name='王五', id=3}
              Student{name='张三', id=1}
              Student{name='李四', id=5}
              Student{name='李四', id=2}
              */
          }
      }
    • LinkedHashSet

      上面介绍到Set集合是存进去元素是没有顺序的,如果要保证有序,则需要使用LinkedHashSet,它是链表和哈希表组合的一个数据结构。

      public class LinkedHashSetDemo {
          public static void main(String[] args) {
              LinkedHashSet<String> hs = new LinkedHashSet<>();
      
              hs.add("张三");
              hs.add("李四");
              hs.add("王五");
              System.out.println(hs); // 输出:[张三, 李四, 王五]
      
              // 遍历元素
              for (String s : hs) {
                  System.out.print(s + " ");
              } // 输出: 张三 李四 王五
          }
      }

原文地址:https://www.cnblogs.com/LucasBlog/p/12359450.html

时间: 2024-10-14 04:27:26

Java集合---List和Set的相关文章

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度

Java 集合

在Java Collections Framework中,不同类型的集合使用不同类型的数据结构以不同的方式存储它们的元素. 集合框架提供了遍历集合的以下方法: 使用迭代器 使用for-each循环 使用forEach()方法 使用迭代器 迭代器可以对集合执行以下三个操作: 检查是否有尚未访问的元素. hasNext() 检查是否有下一个访问的元素. next() 删除集合的最后访问元素. remove() 例子1 使用迭代器打印列表的所有元素: import java.util.ArrayLis

《深入理解Java集合框架》系列文章

Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framework, JCF)的资料却很少,甚至很难找到一本专门介绍它的书籍,这给Java学习者们带来不小的麻烦.我深深的不解其中的原因.虽然JCF设计参考了STL,但其定位不是Java版的STL,而是要实现一个精简紧凑的容器框架,对STL的介绍自然不能替代对JCF的介绍. 本系列文章主要从数据结构和算法层面分析

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

Java集合

JAVA集合小结   有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复 HashMap TreeMap 是(用二叉树排序) 几个面试常见问题:1.Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?   A:Vector和HashT

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

Java集合总览

这篇文章总结了所有的Java集合(Collection).主要介绍各个集合的特性和用途,以及在不同的集合类型之间转换的方式. Arrays Array是Java特有的数组.在你知道所要处理数据元素个数的情况下非常好用.java.util.Arrays 包含了许多处理数据的实用方法: Arrays.asList:可以从 Array 转换成 List.可以作为其他集合类型构造器的参数. Arrays.binarySearch:在一个已排序的或者其中一段中快速查找. Arrays.copyOf:如果你

【Java集合源码剖析】HashMap源码剖析

转载请注明出处:http://blog.csdn.net/ns_code/article/details/36034955 HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,

JAVA集合框架

收藏 查看我的收藏 146有用+1 56 编辑 Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态的Web.Internet计算.从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet.集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实

java集合之整体架构

Java集合框架总结 Java集合是java 提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections). Java集合工具包框架图(如下): 大致说明: 看上面的框架图,先抓住它的主干,即Collection和Map. 1. Collection是一个接口,是高