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文档就能学到的.在 ...
随机推荐
- docker研究-6 dockerfile 介绍使用
Dockerfile是用来创建镜像的,首字母必须大写.
- 17、DNS服务器
DNS domain name system 域名系统 [root@li ~]# vim /etc/nsswitch.conf hosts: files dns --涉及到 ...
- JS高阶---执行上下文
1.代码分类 2.全局执行上下文 3.函数执行上下文 .
- SQLAlchemy(3)
一. SQLAlchemy 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使 ...
- 201871010107-公海瑜《面向对象程序设计(java)》第八周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https:// ...
- 海量数据MySQL项目实战
主要内容包含 MySQL 典型数据库架构介绍.MySQL 主流数据库架构对比等理论性知识,然后从“订单.用户”两个项目实战,抛砖引玉,介绍亿级互联网业务数据库项目如何设计. MySQL 典型数据库架构 ...
- LG2463/BZOJ4698 「SDOI2008」Sandy的卡片 后缀数组
问题描述 LG2463 BZOJ4698 题解 看到\(n\)个数串,一开始不太好处理,可以很容易想到把这\(n\)个数串连到一起,形成一个大串,但是每个串之间不容易处理. 经过思考,想到在每个串中间 ...
- n8n 试用
前边有简单的介绍n8n,如果大家看了官方网站会有一个比较醒目的说明zapier以及tray.io的开源替代方案 以下是一个简单的试用 环境准备 docker-compose 文件 version: ...
- <Tree> 110 124
110. Balanced Binary Tree 方法是如果我们发现子树不平衡,则不计算具体的深度,而是直接返回-1.那么优化后的方法为:对于每一个节点,我们通过checkDepth方法递归获得左右 ...
- 11/4 <LinkedList>
82. Remove Duplicates from Sorted List II 跳过重复节点,返回head. class Solution { public ListNode deleteDupl ...