java中的集合

这篇具有很好参考价值的文章主要介绍了java中的集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.集合概述

Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

java集合,java,jvm,开发语言

2.Collection接口

Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set 中的数据对象没有顺序且不可以重复。

List中的数据对象有顺序且可以重复。

3.List接口及其实现类

 List继承了Collection接口,有三个实现的类。
- ArrayList
数组列表,数据采用数组方式存储。
-LinkedList
链表
-Vector
数组列表,添加同步锁,线程安全的

public class VectorDemo {
    public static void main(String[] args) {
        Vector<String> vector=new Vector();
        vector.add("a");
        vector.add("a");
        vector.add("a");
        vector.add("a");
        vector.add("a");
        System.out.println(vector);
    }


}

ArrayList实现了长度可变的数组,在内存中分配连续的空间
遍历元素和随机访问元素的效率比较高。

LinkedList采用链表存储方式插入、删除元素时效率比较高

ArrayList的常用方法
add(int index, E element)
get(int index)
indexOf(Object o)
lastIndexOf(Object o)
remove(int index)    删除并返回指定位置元素
removeRange (int fromIndex, int toIndex) 删除指定区间的元素(子类继承使用)
set(int index, E element)

 ArrayList<Integer> arrayList=new ArrayList();
        arrayList.add(100);
        arrayList.add(1,10);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        arrayList.add(20);
        //arrayList.clear();
        System.out.println(arrayList.contains(20));
        System.out.println(arrayList.isEmpty());
        System.out.println(arrayList.get(0));
        System.out.println(arrayList.remove(1));//删除
        System.out.println(arrayList.remove((Object)100));//删除某个值
        Object [] array=arrayList.toArray();
        System.out.println(Arrays.toString(array));//转数组
        System.out.println(arrayList);

LinkedList的常用方法
add(int index,Object element)
addFirist(Object element)
addLast(Object element)
get(int index)
removeFirst()
removeLast()
remove(int index)
getFirst()
getLast()

LinkedList<String> linklist=new LinkedList();
        linklist.add("a");
        linklist.add("a");
        linklist.add("a");
        linklist.add("a");
        linklist.add("a");
        //linklist.clear();
        linklist.addFirst("e");
        linklist.addLast("e");
        //peek 检索不删除
        //poll 检索并删除
        System.out.println(linklist.getFirst());
        System.out.println(linklist.pollLast());
        System.out.println(linklist.removeFirst());
        System.out.println(linklist.indexOf("a"));
        System.out.println(linklist.set(0,"s"));
        System.out.println(linklist.size());
        System.out.println(linklist);

List接口集合迭代

● for循环遍历
● 增强for循环的遍历
● 迭代器遍历(Iterator)

ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        /*//1.for循环
        for(int i=0;i<list.size();i++){
              String s=list.get(i);
              if(s.equals("a")){
                  list.remove(s);
                  i--;
              }
        }System.out.println(list);
         for循环会集合删除后会自动进位*/
     /*//2.增强for循环
        for(String s:list){
            System.out.println(s);
        }*/
        //迭代器iterator(
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if (s.equals("a")) {
                iterator.remove();
            }
        }
        System.out.println(list);

4.Set 接口

● Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类


● HashSet
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表
哈希表依赖于哈希值存储

public class HashSetDemo1 {
    public static void main(String[] args) {
        HashSet<String> hashSet=new HashSet<>();
          hashSet.add("a");
          hashSet.add("白色");
          int a="红色".hashCode();
        System.out.println(a);
          hashSet.add("黑色");
        int a1="种地".hashCode();
        System.out.println(a1);
          hashSet.add("c");
          hashSet.add("d");
        System.out.println(hashSet);
    }
}
public class HashSetDemo {
    public static void main(String[] args) {
        HashSet<Car> hashSet=new HashSet<>();
        Car car1= new Car("宝马1",101);
        Car car5= new Car("宝马1",101);
        Car car2= new Car("宝马2",102);
        Car car3= new Car("宝马3",103);
        Car car4= new Car("宝马4",104);
        //在Car类中重写了hashcode方法,先对hash值进行比较,在对内容进行比较

        hashSet.add(car1);
        hashSet.add(car2);
        hashSet.add(car3);
        hashSet.add(car4);
        hashSet.add(car5);
        System.out.println(hashSet);
    }


● TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)。

public class TreeSetDemo {
    public static void main(String[] args) {
        TreeSet<Car> treeSet=new TreeSet<>();
        Car car1= new Car("宝马1",101);
        Car car5= new Car("宝马1",101);
        Car car2= new Car("宝马2",102);
        Car car3= new Car("宝马3",103);
        Car car4= new Car("宝马4",104);
        treeSet.add(car1);
        treeSet.add(car3);
        treeSet.add(car5);
        treeSet.add(car2);
        treeSet.add(car4);
        System.out.println(treeSet);

    }

5.Set接口集合的迭代

遍历方式
增强for循环
迭代器遍历

  ArrayList<String> list = new ArrayList<>();

        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");

       ListIterator<String> listIterator=list.listIterator();
       while(listIterator.hasNext()){
           String s=listIterator.next();
           System.out.println(s);
       }
      ListIterator<String> listIterator1=list.listIterator(list.size());
       while(listIterator.hasPrevious()){
           String s=listIterator.previous();
           System.out.println(s);
       }

上文中用到的Car类中重写了一系列方法。文章来源地址https://www.toymoban.com/news/detail-679136.html

package com.ffyc.collection;

public class Car  implements Comparable<Car> {
    String name;
    int num;
    public int compareTo(Car o) {
        return o.num-this.num;
    }

    public Car(String name, int num) {
        this.name = name;
        this.num = num;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Car car = (Car) o;

        if (num != car.num) return false;
        return name != null ? name.equals(car.name) : car.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + num;
        return result;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }



}

到了这里,关于java中的集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java语言第三篇集合

    集合和数组的对比 数组的长度是不可变的,集合的长度是可变的。 数组可以存基本数据类型和引用数据类型。集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类。 Collection 集合 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

    2024年01月23日
    浏览(60)
  • 聊聊 Java 集合框架中的Arrays

    Arrays 和 Collections 是分别操作数组和集合的两个工具类。今天就来对 Arrays 中的内容作个总结。 Arrays 类位于 java.util 包中。 Arrays 继承 Object Arrays 类中的静态方法可以对数组进行排序、查询、搜索等等操作。 1. Arrays.asList() 方法描述 该方法返回一个 ArrayList , 其返回的 ArrayList

    2024年01月21日
    浏览(38)
  • jvm深入研究文档--java中的堆--详解!--jvm底层探索(1)

    JVM的内存分区包括以下几个部分: 堆区(Heap) - 这是JVM的主要部分,用于存储实例对象和大多数Java对象,如数组和用户定义的类。 方法区(Method Area) - 这是线程私有的,用于存放类对象(加载好的类)。 栈区(Stack) - 这是线程私有的,包括虚拟机栈和本地方法栈。虚拟

    2024年02月07日
    浏览(41)
  • Java JVM中的GC机制详解

    垃圾回收(Garbage Collection,简称GC)机制是JVM中最重要的部分之一。在Java程序运行的过程中,运行时数据区域(包括堆和栈等内存区域)一直都需要使用和回收内存空间。由于Java中的内存分配方式是动态的,所以在程序运行期间,其内存空间的占用量会不断变化。 如果Java程

    2024年02月14日
    浏览(33)
  • 「Java」《Java集合框架详解:掌握常用集合类,提升开发效率》

    Java 集合框架是 Java 编程中不可或缺的一部分。它提供了一组强大的数据结构和算法,用于存储、操作和处理对象数据。本文将深入探讨 Java 集合框架的核心概念,介绍常用的集合接口和实现类,并提供实际应用示例,帮助读者更好地理解和应用集合框架,提升开发效率。

    2024年02月11日
    浏览(36)
  • 一文搞懂Java中的容器(集合类)

    提示:本文介绍的集合类有很多,有的是日常开发常用的,有的是面试常问的,建议大家都了解一点。 Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示: 这里有个面试点:Collection 和 Collections 有什么区别? Collection 是一个集合接口 Collections 是一个包装类,

    2024年02月09日
    浏览(44)
  • 【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

    List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。 Queue (实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 Map (⽤ key 来搜索的专家): 使⽤键值对(key-value)存

    2024年02月10日
    浏览(34)
  • JVM 元空间、java中的元空间

    原空间(Meta Space) ​ 用于存放类信息、常量、静态变量、JIT即时编译器百年以后的机器代码等数据等。例如:java.lang.Object类的元信息、Integer.MAX_VALUE等常量。 JDK1.6 HotSpot JVM 使用Method Area方法区存储,也叫 永久代(Permanent Generation) 。 方法区和“永久代(Permanent Generation)

    2024年02月01日
    浏览(30)
  • 【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合

    目录 List集合 1.1 概述 1.2 特点 1.3 常用方法 1.4 ArrayList集合 1.4.1 概述  1.4.2 练习 1.5 LinkedList集合  1.5.1 概述 1.5.2 特点 1.5.3 常用方法 1.5.4 练习 1.6 Vector类 1.6.1 概述 1.6.2 练习 1.7 List实现类的异同点         java.util.List: List是一个接口,它继承自Collection接口。 常用的实现

    2024年01月25日
    浏览(45)
  • 常用Java代码-Java中的并发集合(ConcurrentHashMap、CopyOnWriteArrayList等)

    在Java中,并发集合是一组为多线程环境设计的集合类,它们提供了线程安全的操作。这些集合类包括 ConcurrentHashMap , CopyOnWriteArrayList 等。以下是对这两个类的一个简单的代码解释。 1.ConcurrentHashMap ConcurrentHashMap 是Java并发包 java.util.concurrent 中的一个类,它提供了线程安全的

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包