java集合分类(Java中如何对list集合中相同的元素分类)

2025-06-01 08:45:01 :0

java集合分类(Java中如何对list集合中相同的元素分类)

这篇文章给大家聊聊关于java集合分类,以及Java中如何对list集合中相同的元素分类对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

Java中如何对list集合中相同的元素分类

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.TreeSet;

public class MyCount {

public static void main(String args) {

Integer arr={1,2,2,2,2,4,4,4,6,6,6,6,12,12,13,13,13,16,17,19,19,19,36,39};

List《Integer》 numList=Arrays.asList(arr);

TreeSet《Integer》 ts=new TreeSet《》(numList);

Iterator《Integer》 it=ts.iterator();

for (int i=0;it.hasNext();) {

int index=++i,num=it.next(),count=0;

System.out.println("工序"+index+":"+num);

for(int j=0;j《numList.size();j++) {

if(numList.get(j)==num) {

System.out.println("\t次数:"+(++count)+":"+num);

}

}

}

}

}

Java五个最常用的集合类之间的区别和联系

常用的集合类有一下几种:
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口

HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。
2.同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3.值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的

ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1.同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不 是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必 要的性能开销。
2.数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。

总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector

1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空

ArrayList
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。

LinkedList
经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
栈:后进先出的数据结构。
注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。

Vector
(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。

面试经验(知识点):
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。
实现栈一定要用LinkedList。
(在JAVA1.5中,collection有queue来实现队列。)

Set-HashSet实现类:
遍历一个Set的方法只有一个:迭代器(interator)。
HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。
在Object中除了有finalize(),toString(),equals(),还有hashCode()。
HashSet底层用的也是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=o.hashCode(); 返回的hashCode为整数值。
Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比 较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student对象时覆盖它的hashcode。
因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
现在,在大部分的JDK中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

java集合分为哪几大类

Set、List、Map和Queue4大类。
1、Set:代表无序的、不允许有重复元素的集合。
2、List:代表有序的、允许有重复元素的集合。
3、Map:代表具有映射关系的集合。
4、Queue:代表队列集合。

java课程培训机构分享Java并发编程常用的类和集合

AtomicInteger

可以用原子方式更新int值。类AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference的实例各自提供对相应类型单个变量的访问和更新。java课程培训机构认为基本的原理都是使用CAS操作:

booleancompareAndSet(expectedValue,updateValue);

如果此方法(在不同的类间参数类型也不同)当前保持expectedValue,则以原子方式将变量设置为updateValue,并在成功时报告true。

循环CAS,参考AtomicInteger中的实现:

publicfinalintgetAndIncrement(){    for(;;){      intcurrent=get();      intnext=current+1;      if(compareAndSet(current,next))        returncurrent;

    }

  }  publicfinalbooleancompareAndSet(intexpect,intupdate){    returnunsafe.compareAndSwapInt(this,valueOffset,expect,update);

  }

ABA问题

因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A就会变成1A-2B-3A。

从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。

ArrayBlockingQueue

一个由数组支持的有界阻塞队列。此队列按FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞。

此类支持对等待的生产者线程和使用者线程进行排序的可选公平策略。默认情况下,不保证是这种排序。然而,通过将公平性(fairness)设置为true而构造的队列允许按照FIFO顺序访问线程。公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。

LinkedBlockingQueue

一个基于已链接节点的、范围任意的blockingqueue。此队列按FIFO(先进先出)排序元素。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。

可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于Integer.MAX_VALUE。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。

如果构造一个LinkedBlockingQueue对象,而没有指定其容量大小,LinkedBlockingQueue会默认一个类似无限大小的容量(Integer.MAX_VALUE),这样的话,如果生产者的速度一旦大于消费者的速度,也许还没有等到队列满阻塞产生,系统内存就有可能已被消耗殆尽了。

文章分享结束,java集合分类和Java中如何对list集合中相同的元素分类的答案你都知道了吗?欢迎再次光临本站哦!

java集合分类(Java中如何对list集合中相同的元素分类)

本文编辑:admin

更多文章:


jfreechart 极坐标设置线条颜色(各位,怎样修改 matlab 中极坐标生成的图像线条的宽度求程序指导! 谢谢了!!!)

jfreechart 极坐标设置线条颜色(各位,怎样修改 matlab 中极坐标生成的图像线条的宽度求程序指导! 谢谢了!!!)

本篇文章给大家谈谈jfreechart 极坐标设置线条颜色,以及各位,怎样修改 matlab 中极坐标生成的图像线条的宽度求程序指导! 谢谢了!!!对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有

2025年8月9日 12:00

appear后面可以加名词吗(高考英语备考之 appear的用法)

appear后面可以加名词吗(高考英语备考之 appear的用法)

“appear后面可以加名词吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看appear后面可以加名词吗(高考英语备考之 appear的用法)!本文目录高考英语备考之 appear的用法“appear to” 后面用什么形

2025年9月17日 03:30

django框架安装过程(京东云擎怎么搭建django 框架)

django框架安装过程(京东云擎怎么搭建django 框架)

大家好,关于django框架安装过程很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于京东云擎怎么搭建django 框架的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所

2025年7月24日 02:00

index加match函数出错(excel中INDEX和MATCH函数出现的问题)

index加match函数出错(excel中INDEX和MATCH函数出现的问题)

其实index加match函数出错的问题并不复杂,但是又很多的朋友都不太了解excel中INDEX和MATCH函数出现的问题,因此呢,今天小编就来为大家分享index加match函数出错的一些知识,希望可以帮助到大家,下面我们一起来看看这个

2026年1月3日 23:00

牛不啦的个人主页(牛不啦妯娌大牛的新欢是谁)

牛不啦的个人主页(牛不啦妯娌大牛的新欢是谁)

本篇文章给大家谈谈牛不啦的个人主页,以及牛不啦妯娌大牛的新欢是谁对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录牛不啦妯娌大牛的新欢是谁牛不啦的公公是怎么去世的牛不啦妯娌大牛的新欢是谁没有信息透露。牛不啦妯娌是西瓜视频2021

2025年12月10日 00:00

factory造句简单(工厂的造句工厂的造句是什么)

factory造句简单(工厂的造句工厂的造句是什么)

各位老铁们,大家好,今天由我来为大家分享factory造句简单,以及工厂的造句工厂的造句是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录工厂的

2026年3月16日 06:00

开源中国大卫(大卫和名流避孕套那个好)

开源中国大卫(大卫和名流避孕套那个好)

今天给各位分享大卫和名流避孕套那个好的知识,其中也会对大卫和名流避孕套那个好进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录大卫和名流避孕套那个好中国十大品牌漆中国油漆十大品牌大卫这个牌子的避孕套卫生吗大卫地板

2026年9月17日 03:30

手机修图特效软件(手机最火的p图软件有哪些)

手机修图特效软件(手机最火的p图软件有哪些)

这篇文章给大家聊聊关于手机修图特效软件,以及手机最火的p图软件有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录手机最火的p图软件有哪些手机有哪些修图软件手机修图用什么app好手机上P图的软件有哪些手机照片修图软件哪个好用

2025年12月24日 15:45

chunked是什么意思(Chunked 什么意思)

chunked是什么意思(Chunked 什么意思)

大家好,今天小编来为大家解答以下的问题,关于chunked是什么意思,Chunked 什么意思这个很多人还不知道,现在让我们一起来看看吧!本文目录Chunked 什么意思chunked中文是什么意思Chunked 什么意思"chunked"

2026年5月26日 06:30

抖音表单广告(抖音怎么做广告)

抖音表单广告(抖音怎么做广告)

本篇文章给大家谈谈抖音表单广告,以及抖音怎么做广告对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录抖音怎么做广告抖音表单是什么抖音广告怎么投

2025年10月15日 02:15

企业管理三大体系(描述一个企业的管理体系)

企业管理三大体系(描述一个企业的管理体系)

这篇文章给大家聊聊关于企业管理三大体系,以及描述一个企业的管理体系对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录描述一个企业的管理体系企业的管理体系包括哪些具体的管理部分什么是三个体系企业管理的三大核心三体系是哪三个体系企业

2025年11月5日 11:45

routes插件(模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解答!!)

routes插件(模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解答!!)

大家好,今天小编来为大家解答以下的问题,关于routes插件,模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解答!!这个很多人还不知道,现在让我们一起来看看吧!本文目录模拟火车2019机车插件和线路插件安装在哪里怎么激活求大神解

2025年7月11日 16:45

手机java运行库下载(三星C3300K手机下载JAVA游戏详细方法)

手机java运行库下载(三星C3300K手机下载JAVA游戏详细方法)

大家好,手机java运行库下载相信很多的网友都不是很明白,包括三星C3300K手机下载JAVA游戏详细方法也是一样,不过没有关系,接下来就来为大家分享关于手机java运行库下载和三星C3300K手机下载JAVA游戏详细方法的一些知识点,大家

2026年1月12日 09:00

雅马哈音响portable(为什么存储卡里的歌在可插卡蓝牙音响上有些能放,有些不能放)

雅马哈音响portable(为什么存储卡里的歌在可插卡蓝牙音响上有些能放,有些不能放)

各位老铁们,大家好,今天由我来为大家分享雅马哈音响portable,以及为什么存储卡里的歌在可插卡蓝牙音响上有些能放,有些不能放的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了

2026年8月5日 16:15

app代码查看器(那个app能看到链接背后的代码)

app代码查看器(那个app能看到链接背后的代码)

各位老铁们,大家好,今天由我来为大家分享app代码查看器,以及那个app能看到链接背后的代码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录那个ap

2025年10月13日 06:45

电脑怎么强制结束任务(如何强制退出当前程序)

电脑怎么强制结束任务(如何强制退出当前程序)

本篇文章给大家谈谈电脑怎么强制结束任务,以及如何强制退出当前程序对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录如何强制退出当前程序可以怎样

2025年7月19日 17:45

易语言源码忘记保存奔溃怎么找回(易语言源码丢失,用什么恢复软件恢复后可以用)

易语言源码忘记保存奔溃怎么找回(易语言源码丢失,用什么恢复软件恢复后可以用)

这篇文章给大家聊聊关于易语言源码忘记保存奔溃怎么找回,以及易语言源码丢失,用什么恢复软件恢复后可以用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录易语言源码丢失,用什么恢复软件恢复后可以用易语言忘记把修改好的原码记保存怎么办

2025年12月9日 05:45

回车键上面那个键是什么(回车键往下哪个键往上)

回车键上面那个键是什么(回车键往下哪个键往上)

大家好,回车键上面那个键是什么相信很多的网友都不是很明白,包括回车键往下哪个键往上也是一样,不过没有关系,接下来就来为大家分享关于回车键上面那个键是什么和回车键往下哪个键往上的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧

2025年9月25日 17:15

printf的功能(C语言中printf有什么作用)

printf的功能(C语言中printf有什么作用)

大家好,关于printf的功能很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于C语言中printf有什么作用的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文

2026年2月22日 07:45

initialized翻译(帮我翻译英文)

initialized翻译(帮我翻译英文)

大家好,initialized翻译相信很多的网友都不是很明白,包括帮我翻译英文也是一样,不过没有关系,接下来就来为大家分享关于initialized翻译和帮我翻译英文的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目

2025年6月7日 00:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索