Set无序怎么办?
在JAVA中,提供多种不同的结构来组织对象,Set(集合)是其中的一种,本身是一个接口,其迭代时的顺序取决于其具体实现。
典型的实现包括:
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;
LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;
TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。
set有多种,hashset,treeset和linkedhashset比较常见,hashset最常用。linkedhashset是有序的,hashset是无序的。linkedhashset是以链表形式存放数据的,hashset是用hash散列存放数据的。list也分好几种,主要有arraylist和linkedlist,都是有序的,其中arraylist类比数组,linkedlist类比链表。arraylist是线程不同步的,也就是说多个线程同时操作一个list那么List中存放数据的一致性就不能保证。vector是线程同步的,也就是说线程安全的。搜索
本回答被提问者采纳
set集合 是不保证集合中元素的顺序的
list 集合 才会有顺序 List的特征是其元素以线性方式存储
set它不允许出现重复元素 且允许包含值为null的元素,但最多只能有一个null元素
Set 和List 都继承了Conllection
//对 set 的遍历 //1.迭代遍历:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
} //2.for循环遍历:
for (String str : set) {
System.out.println(str);
} //优点还体现在泛型 假如 set中存放的是Object Set<Object> set = new HashSet<Object>();
//for循环遍历:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}
java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法
注意:这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。
下面分析一下Set集合的另外一个重要实现类TreeSet,
TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator进行排序,具体取决于使用的构造方法。
通俗一点讲,就是可以按照排序后的列表显示,也可以按照指定的规则排序
输出:[a, b, c, d, e, f]
按照排序后输出
那么如果我们想让他倒序输出呢?当然方法很多。这里我采用指定一个规则让他倒序输出
输出:e d c b a A
如果Set集合中放入的是我们自己定义的一个类类型呢?
注意:一定要定义一个排序规则类实现Comparator接口,与上面的方法类似
package com.sort; import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet; public class TreeSetTest2 { public static void main(String[] args) {
Set<Person> set = new TreeSet<Person>(new PersonComparator()); Person p1 = new Person(10);
Person p2 = new Person(20);
Person p3 = new Person(30);
Person p4 = new Person(40); set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4); for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){
System.out.print(iterator.next().score+" ");
}
}
} class Person{
int score; public Person(int score){
this.score = score;
} public String toString(){
return String.valueOf(this.score);
}
} class PersonComparator implements Comparator<Person>{ @Override
public int compare(Person o1, Person o2) { return o1.score - o2.score;
} }
输出:10 20 30 40
如果按照一个人的分数的倒序排列,只需要更改compare方法中的o2.score-o1.score
Set无序怎么办?的更多相关文章
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 9月11日上午HTML有序列表、无序列表、网页的格式和布局
样式表 六.列表方块 1.有序列表变无序列表 <ol> <li>张店</li> <li>桓台</li> <li>淄川</l ...
- 有1,2,3一直到n的无序数组,排序
题目:有1,2,3,..n 的无序整数数组,求排序算法.要求时间复杂度 O(n), 空间复杂度O(1). 分析:对于一般数组的排序显然 O(n) 是无法完成的. 既然题目这样要求,肯定原先的数组有一定 ...
- BroadcastReceiver之发送自定义无序广播
首先,发送一个自定义广播:(用sendBroadcast(intent)发送一条无序广播) public void click(View v){ Intent intent = new Intent( ...
- 快速查找无序数组中的第K大数?
1.题目分析: 查找无序数组中的第K大数,直观感觉便是先排好序再找到下标为K-1的元素,时间复杂度O(NlgN).在此,我们想探索是否存在时间复杂度 < O(NlgN),而且近似等于O(N)的高 ...
- 9月5日网页基础知识 通用标签、属性(body属性、路径、格式控制) 通用标签(有序列表、无序列表、常用标签)(补)
网页基础知识 一.HTML语言 HTML语言翻译汉语为超文本标记语言. 二.网页的分类 1.静态页面:在静态页面中修改网页内容实际上就是修改网页原代码,不能从后台操作,数据来只能来源于原于代码.静态网 ...
- 【编程题目】有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序;(需要回头仔细研究)
32.(数组.规划)有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序:要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小.例如: var a=[ ...
- HTML无序列表和有序列表
html无序列表<ul><li></li></ul> ul属性设定:<ul type="square"> 常用属性值 ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- set集合,是一个无序且不重复的元素集合
set集合,是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
随机推荐
- IHttpModule接口事件执行 获取Session 找了很多国内的都不对,从国外转过来一个测试可用的
我的环境,asp.net4.0框架集 不多说上代码 public class MyHttpModule : IHttpModule { public void Init(HttpApplication ...
- mysql 1449 : The user specified as a definer ('montor'@'%') does not exist
grant all privileges on *.* to root@"%" identified by "."; flush privileges;
- poj 3026 (最小生成树)
题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...
- 【 枚举 Enum 】循环 名称与值
foreach (WeekDay c in (WeekDay [])Enum.GetValues(typeof(WeekDay ))) {Console.Write(String.Format(& ...
- js类的几种写法
我们常用的有以下几种方法来用JavaScript写一个“类”: 1. 构造函数(public属性和方法) 1: function Person(iName, iAge){ 2: this.name=i ...
- HTML——CSS样式表&布局页面
CSS样式表: 一.作用:美化网页,页面布局. 二.分类: 内联,写在body里标签style=""里面的样式,优点是控制精确,可重用性差. 内嵌,嵌在网页的head里面,可重用性 ...
- 使用ADO.net中的链接字符串
需要引用:System.Configuration命名空间 ConfigurationManager.ConnectionStrings["sqlConnStr"].Connect ...
- S5700交换机配置端口镜像
S5700交换机配置端口镜像 <Quidway>system-view //进入系统视图 Enter system view, return user view with Ctrl+ ...
- 关于ASP.Net的一些概念 转载
①理解 .NET Platform Standard 作者:田园里的蟋蟀 http://www.cnblogs.com/xishuai/archive/2016/05/24/understand-do ...
- js & jq 加载js
最近做项目中, 经常要写js代码的, 从纯前端人员, 到我们这边的过度, 每个人写的风格都不一样, 大概整理了一下有这么几种 1.1 $(document).ready(function(){}); ...