首页 > 编程语言 >Java——集合

Java——集合

时间:2024-03-13 15:32:32浏览次数:31  
标签:Set Java hashMap 元素 list key 集合

集合

概念

集合类存放的都是对象的引用,而不是对象本身。

集合是一个动态的数组,数组的长度是不可变的,集合的长度是可变的。

集合只能存储引用数据类型。

集合类型主要有三种:set(集),list(列表),和map(映射)

集合接口分为:Collection和Map,List,Set

Collection接口

collection中的元素是无序的可重复的

List集合

特点:元素有序,每一个元素都存在一个索引,元素可以重复。

ArrayList

ArrayList是顺序结构

特点:查询快,增删慢,线程不安全,效率高

ArrayList集合应用:添加,删除,for-each循环遍历

public class TestList {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财", 18);
        List<Dog> list = new ArrayList<>();
        //添加元素
        list.add(dog);
        //往指定索引位置插入元素,不需要手动扩容位移插入了
        list.add(0, dog2);
        //删除指定索引位置的元素
        list.remove(0);
        //判断非空
        if (list.size() != 0) {
            //增强型for循环 for-each循环遍历
            for (Dog d : list) {
                System.out.println(d.getName() + d.getAge());
            }
            //判断某个元素是否存在于集合中
            boolean contains = list.contains(dog1);
            System.out.println(contains);
        }
    }
}

LinkedList

底层数据结构是链表

特点:查询慢,增删快,线程不安全,效率高

LinkedList应用:

public class TestlinkedList {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财",18);
        Dog dog1 = new Dog("锤锤",12);
        LinkedList<Dog> list = new LinkedList<>();
        list.add(dog);
        list.add(1,dog1);
        //取出栈顶元素
        System.out.println(list.pop());
        //删除栈顶元素
        System.out.println(list.peek().name);
    }
}

Map集合

特点:元素无序,元素通过键值对的方式进行存储,坚不可重复,值可以重复

HashMap

HashMap是可以序列化的,是线程不安全的。

HashMap的底层主要是基于数组,链表和红黑树实现的。

他是通过计算散列码来决定存储位置的。

HashMap中主要是通过可以的hashCode来计算hash值

TreeMap

TreeMap是基于红黑树实现的

TreeMap中不允许键对象是null。

HashMap与Set集合的应用:

public class TestMap {
    public static void main(String[] args) {
        //键值对 key-value
        HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("姓名","张三");
        hashMap.put("性别","男");
        hashMap.put("身高","180cm");
        hashMap.put("体重","75公斤");
        //hashmap是无序存放的,所以无法直接通过索引遍历,且key值不可重复,正好和Set集合特点一样
        //所以就通过hashMap.keySet()把key方法一个Set集合里面
        Set<String> set = hashMap.keySet();
        //增强型for循环  for-each
        //冒号左边是从集合中取出值的对应类型空间,冒号右边是你要遍历的集合
        for (String key:set) {
            System.out.println(hashMap.get(key));
        }
       //用迭代器对Set集合进行迭代,取出key放到迭代器里
        Iterator<String> iterator = set.iterator();
        //对迭代器进行循环,取出key对应的value值
        //循环条件:iterator.hasNext() 判断迭代器中是否有下一个元素,有则执行循环,取出下一个元素打印。
        while (iterator.hasNext()){
            String key = iterator.next();
            System.out.println(hashMap.get(key));
        }
    }
}

Set集合

特点:元素无序,元素是通过链表精选存储的,元素不可重复

HashSet

特点:线程不安全,效率高,允许存储null元素,元素无序且唯一

TreeSet

具有Set的属性和方法

TreeSet基于TreeMap实现的

底层结构是红黑树(平衡二叉树)。

Map集合与Collection集合的区别:

Map集合存储的元素是成对出现的(键值对)。

MAP集合的键是唯一的,值是可重复的。

Collection集合存储的元素是单独出现的。

Collection集合的儿子Set是唯一的,List是可重复的。

Map集合的数据结构只针对键有效,跟值无关。

Collection集合的数据结构是针对元素有效。

增强性for循环  for-each

冒号左边是从集合中取出值的对应类型空间,冒号右边是你要遍历的集合

Set<String> set = hashMap.keySet();
for (String key:set) {
System.out.println(hashMap.get(key));
}

迭代器Iterator

用迭代器对Set集合进行迭代,取出key放到迭代器里
Iterator<String> iterator = set.iterator();
对迭代器进行循环,取出key对应的value值
循环条件:iterator.hasNext() 判断迭代器中是否有下一个元素,有则执行循环,取出下一个元素打印。
while (iterator.hasNext()){
String key = iterator.next();
System.out.println(hashMap.get(key));
}

标签:Set,Java,hashMap,元素,list,key,集合
From: https://blog.csdn.net/weixin_67349954/article/details/136679349

相关文章

  • Java中线程的几种创建方式
    本文章将简单介绍有关java的四种线程创建方式一.继承Thread类//继承了Tread的类->MyTreadpublicclassMyThreadextendsThread{//线程启动后将要运行的代码@Overridepublicvoidrun(){System.out.println("通过继承Thread的方式来创建线程")......
  • java毕业设计基于微信小程序的新闻管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着移动互联网技术的飞速发展,智能手机的普及率日益增高,人们获取信息的方式也发生了翻天覆地的变化。微信小程序作为一种新型的应用形态,因其无需下载安装......
  • Java基础 --- 综合练习
    Java基础---综合练习案例一卖飞机票需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。importjava.util.Scanner;public......
  • 【Javascript】 Promise 对象(一)
    Promise的含义Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操......
  • JVM原理(GC,内存),JAVA底层
    1.JVM内存模型线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区2.什么是栈又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈.3.什么是本地方法栈与栈类似,......
  • JAVA的多线程及并发
    1.Java中实现多线程有几种方法继承Thread类;实现Runnable接口;实现Callable接口通过FutureTask包装器来创建Thread线程;使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方......
  • springboot/java/php/node/python小区物业管理小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加速,住宅小区作为城市生活的基本单元,其管理效率和服务质量直接影响着居民的生活体验。传统的物业管理方式往往依赖于人工操作,不仅耗时......
  • tarjan 各类板子集合
    tarjan大板子(非讲解):1、普通缩点DGAvoidtarjan(intx){ dfn[x]=low[x]=++cntp; q.push(x);v[x]=1; for(inti=head[x];i;i=bi[i].next){ intj=bi[i].to; if(!dfn[j]){ tarjan(j); low[x]=min(low[x],low[j]); } elseif(v[j])low[x]=min(low[x],dfn[j]); }......
  • java面向全面发展的数计学院第二课堂与社团管理系统(ssm)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当前的教育体系中,第一课堂(即传统的课堂教学)虽然扮演着核心角色,但随着素质教育的深入推进和学生个性化发展需求的日益增长,第二课堂和社团活动逐渐显示出......
  • java面向特定群体的健康管理平台(ssm)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今社会,随着科技的飞速发展和生活节奏的加快,人们对健康管理的需求日益增长。特别是对于特定群体,如老年人、慢性病患者、孕妇等,他们需要更加细致、专业......