java -- Set 用法及特点
分类专栏: java学习
Hashset 和 ListHashSet用法及特点
// HashSet 和 LinkedHashSet 用法及特点
/**
* 编写一个ArrayList集合 用Set去重
* 为了保证顺序 我们用LinkedHashSet
*/
public static void fun6() {
ArrayList<String> aList = new ArrayList<>();
aList.add("b");
aList.add("a");
aList.add("a");
aList.add("b");
aList.add("c");
aList.add("c");
LinkedHashSet<String> hSet = new LinkedHashSet<>();
hSet.addAll(aList);
aList.clear();
aList.addAll(hSet);
System.out.println(aList);
}
/**
* 编写一个 从键盘键入一连串字符串,将重复的字符串去掉,打印出不通过的字符
*/
public static void fun5() {
System.out.println("请输入一连串字符: ");
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
char[] charArray = s1.toCharArray();
HashSet<Character> hSet = new HashSet<>();
for (int i = 0; i < charArray.length; i++) {
hSet.add(charArray[i]);
}
System.out.println(hSet);
}
/**
* 编写一个 随机/不重复的 10个数的程序
* Set集合实现不重复
*/
public static void fun4() {
HashSet<Integer> hSet = new HashSet<>();
while (hSet.size() < 10) {
int i1 = (int)(Math.random() * (20 - 1 + 1) - 1);
hSet.add(i1);
}
System.out.println(hSet);
}
/**
* LinkedHashSet 特点: 有序的(怎么存的可以怎么取出来)
* 底层实现是链表实现
* 同样具有Set的去重的特点
*/
public static void fun3() {
LinkedHashSet<String> lSet = new LinkedHashSet<>();
lSet.add("c");
lSet.add("a");
lSet.add("a");
lSet.add("c");
lSet.add("b");
lSet.add("b");
lSet.add("d");
lSet.add("d");
for (String string : lSet) {
System.out.println(string);
}
}
/**
* 去除对象 --- 需要重写HashCode() 和 equals()
*/
public static void fun2() {
HashSet<Person> hSet = new HashSet<>();
hSet.add(new Person("科比" , 18));
hSet.add(new Person("加索尔" , 19));
hSet.add(new Person("费舍尔" , 20));
hSet.add(new Person("拜纳姆" , 21));
hSet.add(new Person("奥多姆" , 22));
hSet.add(new Person("奥多姆" , 22));
hSet.add(new Person("科比" , 18));
hSet.add(new Person("加索尔" , 19));
hSet.add(new Person("费舍尔" , 20));
hSet.add(new Person("拜纳姆" , 21));
for (Person personCopy : hSet) {
System.out.println(personCopy);
}
}
/**
* Set接口特点: 无下标 无顺序 **无重复**
*/
public static void fun1() {
HashSet<String> hSet = new HashSet<>();
hSet.add("c");
hSet.add("a");
hSet.add("a");
hSet.add("c");
hSet.add("b");
hSet.add("b");
hSet.add("d");
hSet.add("d");
for (String string : hSet) {
System.out.println(string);
}
}
TreeSet用法及特点
// 计数器
/**
* 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)
* 按照总分从高到低输出到控制台。
*/
public static void fun13() {
System.out.println("请输入姓名及成绩:");
Scanner scanner = new Scanner(System.in);
TreeSet<Clases1> tSet = new TreeSet<>();
while(tSet.size() < 5) {
String s1 = scanner.nextLine();
String[] split = s1.split(",");
int parseInt = Integer.parseInt(split[1]);
int parseInt2 = Integer.parseInt(split[2]);
int parseInt3 = Integer.parseInt(split[3]);
int num = parseInt + parseInt2 + parseInt3;
tSet.add(new Clases1(split[0], parseInt, parseInt2, parseInt3, num));
}
System.out.print(tSet);
}
/**
* 程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入.
* 把所有输入的整数倒序排列打印.
*/
public static void fun12() {
System.out.println("请输入一个字符串");
Scanner scanner = new Scanner(System.in);
TreeSet<Integer> tSet = new TreeSet<>(new Compara3());
while(true) {
String s1 = scanner.nextLine();
if (s1.equals("quit")) {
break;
}
int parseInt = Integer.parseInt(s1);
tSet.add(parseInt);
}
System.out.println(tSet);
}
/**
* 键盘接受一个字符串 程序对其中所有字符进行排序
*/
public static void fun11() {
System.out.println("请输入一串字符串: ");
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
char[] charArray = s1.toCharArray();
TreeSet<Character> tSet = new TreeSet<>(new Compara2());
for (int i = 0; i < charArray.length; i++) {
tSet.add(charArray[i]);
}
System.out.println(tSet);
}
/**
* ArrayList存储无序并且重复的字符串, 要求排序 并且不能去除重复
*/
public static void fun10() {
ArrayList<String> aList = new ArrayList<>();
aList.add("aaa");
aList.add("asd");
aList.add("ww");
aList.add("zz");
aList.add("CC");
aList.add("a");
aList.add("bcd");
aList.add("aaa");
TreeSet<String> tSet = new TreeSet<>(new compara1());
tSet.addAll(aList);
aList.clear();
aList.addAll(tSet);
System.out.println(aList);
}
/**
* 使用比较器 比较排序集合中的元素. 要求保留重复
* 重写比较器comparator<T>接口 实现自己想要的比较方法
* 注意:要记着将comparator的实现类要创建在 集合中
*/
public static void fun9() {
TreeSet<String> tSet = new TreeSet<>(new compara1());
tSet.add("aaa");
tSet.add("asd");
tSet.add("ww");
tSet.add("zz");
tSet.add("CC");
tSet.add("a");
tSet.add("bcd");
tSet.add("aaa");
System.out.println(tSet);
}
/**
* TreeSet存储类对象,进行排序 要在创建对象的类中重写compareTo方法
* TreeSet存储的是类对象, 就要看compareTo的返回值
* 返回0 只是一个值
* 返回正数 按存进顺序 正序
* 返回负数 按存进顺序 倒序
*
* TreeSet 内部使用 二叉树来存储的
* 核心:
* 比我小的数存在左边(返回负数时)
* 比我大的数存在右边(返回正数时)
* 不存储, 两个数相等(返回0时)
*
*/
public static void fun8() {
TreeSet<Man> tSet = new TreeSet<>();
tSet.add(new Man("科比", 19));
tSet.add(new Man("乔丹", 20));
tSet.add(new Man("库里", 21));
tSet.add(new Man("格林", 18));
tSet.add(new Man("书豪", 19));
tSet.add(new Man("书豪", 200));
System.out.println(tSet);
}
/**
* TreeSet的特点: **排序**(去重)
*/
public static void fun7() {
TreeSet<Integer> tSet = new TreeSet<>();
tSet.add(5);
tSet.add(4);
tSet.add(1);
tSet.add(2);
tSet.add(3);
tSet.add(5);
tSet.add(5);
for (Integer integer : tSet) {
System.out.println(integer);
}
}
总结:
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象
为什么要使用集合类
当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。
java -- Set 用法及特点的更多相关文章
- 【转】java list用法示例详解
转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...
- Java List 用法代码分析 非常详细
Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...
- Java split用法
Java split用法 java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...
- Java Enum用法详解
Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...
- Java 习惯用法总结
转自:http://www.importnew.com/15605.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » Java 习惯用法总结 2015/04/ ...
- 你真的了解java的lambda吗?- java lambda用法与源码分析
你真的了解java的lambda吗?- java lambda用法与源码分析 转载请注明来源:cmlanche.com 用法 示例:最普遍的一个例子,执行一个线程 new Thread(() -> ...
- java TreeMap用法
转自:http://huchenqiang90.blog.163.com/blog/static/11250080020101025956498/ 最近工作遇到需要按一个model中不同的列进行排序的 ...
- 最全面的Java多线程用法解析
1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable ...
- java Socket用法详解(转)
在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...
- Java习惯用法总结
在微博中看到的一个不错的帖子,总结的很详细,拷贝过来,一是为了方便自己查阅,也能和大家一起共享,后面有原文的链接地址: 在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的.在 ...
随机推荐
- 图解Java数据结构之环形链表
本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...
- Jmeter在chrome浏览器中录制脚本
利用blazemeter插件可以录制chrome浏览器中的操作,并生成jmx文件,导入到jmeter中使用 1. 下载blazemeter 地址:https://pan.baidu.com/s/1V ...
- vsftpd服务
vsftpd服务 文件传输协议(file transfer protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件,上传文件,下载文件.ftp基于TCP协议生成一个虚拟的连接,主要 ...
- [PHP] 项目实践中使用的IOC容器思想
1.容器的意思就是一个全局变量,里面存了很多对象,如果要用到某个对象就从里面取,前提就是要先把对象放进去2.控制反转就是把自己的控制权交给别人3.这两个结合就是,把自己的控制权交给别人并且创建的对象放 ...
- Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip
目录 Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip 场景 过程还原 结论 参考资料 Nginx+Docker部署模式下 asp.net core 获取真实的客户端 ...
- pytest中怎么引用前置中的变量
本文主要总结的是pytest中的前置后置怎么返回参数 我们在做自动化的过程中,如果运用的是pytest的话,会遇到怎么使用前置条件中的变量 比如: @pytest.fixture() def init ...
- OpenGL入门(一):使用GLFW创建简单的窗口
如果使用QT,那么创建一个OpenGL渲染窗口其实很容易,不过出于初学的角度,使用GLFW库来创建新窗口. 1. 下载并配置GLFW GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体 ...
- 出现org.springframework.beans.factory.NoSuchBeanDefinitionException 的解决思路
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: privat ...
- Appium基础:appium相关API
1.获取信息类: 1.1 获取当前界面的组件: driver.currentActivity(); //获取当前界面的activity,可用于断言是否跳转到预期的activity 1.2 获取当前页面 ...
- 201871010136 -赵艳强《面向对象程序设计(java)》第十六周学习总结
201871010136-赵艳强<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnbl ...