Java集合框架之Set接口
1.Set接口不记录元素添加顺序的误区
public void setDemo(){
Set<String> set1 = new HashSet<>();
set1.add("London");
set1.add("Chinese");
set1.add("Shanghai");
set1.add("England");
set1.add("China");
System.out.println(set1);
}
输出结果为:[Shanghai, China, London, England, Chinese]
hashset 没有顺序的意思是实际上的顺序和插入顺序不一样。
比如,按照set.add(1);set.add(2);set.add(3);插入
输出顺序却可能是231
而不是说随机输出顺序。
-------------------------------------------------------------------------------------------
2.Java,子类不是必须重写父类所有方法的,分为以下两种情况:
1.父类方法为抽象方法时,子类必须重写(实现)所有父类的抽象方法;
2.父类方法为普通方法时,子类可以重写父类方法,也可以不重写。
-------------------------------------------------------------------------------------------
3.TreeSet需要重写CompareTo方法 默认情况下进行自然排序。
- //用年龄进行排序
- class Person implements Comparable<Person> {
- String name;
- int age;
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- @Override
- public int compareTo(Person o) {
- if (this.age > o.age) {
- return 1;
- } else if (this.age < o.age) {
- return -1;
- }
- return 0;
- }
- @Override
- public String toString() {
- return "Person [name=" + name + ", age=" + age + "]";
- }
- }
- public class TreeSetDemo {
- public static void main(String[] args) {
- Set<Person> tree = new TreeSet<>();
- tree.add(new Person("李白", 15));
- tree.add(new Person("赵云", 17));
- tree.add(new Person("关羽", 2));
- tree.add(new Person("张飞", 16));
- System.out.println(tree);
想了两天都没搞懂compareTo方法中形参Person o是哪里来的,下面的是我的猜想:
this指代当前对象,第一次插入时,成员变量 name和age分别被赋值为:李白和15,这时候this是指刚插入的李白,然而此时Person o对象不存在,所以不进行比较。
第二次插入"赵云"时,this指代赵云,o指代第一次插入的李白,以此类推,TreeSet会自动调用compareTo方法。
TreeSet会自动调用compareTo方法进行排序
自定义排序:(实现Comparator接口)(根据姓名的长度进行排序)
- class NameLengthComparator implements Comparator<Person> {
- @Override
- public int compare(Person o1, Person o2) {
- if(o1.name.length() > o2.name.length()) {
- return 1;
- }else if(o1.name.length() < o2.name.length()) {
- return -1;
- }
- return 0;//返回0 两个对象指同一个对象
- }
- }
- public class TreeSetDemo {
- public static void main(String[] args) {
- Set<Person> tree2 = new TreeSet<>(new NameLengthComparator());
- tree2.add(new Person("李白123", 15));
- tree2.add(new Person("赵云1", 17));
- tree2.add(new Person("关羽", 2));
- tree2.add(new Person("张飞252727", 16));
- System.out.println(tree2);
- }
- }
Java集合框架之Set接口的更多相关文章
- Java集合框架之Collection接口
Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...
- java 集合框架(二)Iterable接口
Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...
- Java集合框架之四大接口、常用实现类
Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- Java集合框架之Set接口浅析
Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...
- Java集合框架之List接口浅析
Java集合框架之List接口浅析 一.List综述: 毫无疑问List接口位于java.util包下,继承自 Collection接口 存储元素的特点: 有序可重复(有序:即存进去是什么顺序,取出来 ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合框架中List接口的简单使用
Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...
- Java集合框架的基础接口有哪些?
Collection为集合层级的根接口.一个集合代表一组对象,这些对象即为它的元素.Java平台不提供这个接口任何直接的实现. Set是一个不能包含重复元素的集合.这个接口对数学集合抽象进行建模,被用 ...
- java集合框架部分相关接口与类的介绍
集合基础 接口 Iterable //Implementing this interface allows an object to be the target of the "for-ea ...
随机推荐
- css 清除float的方法
首先我们要理解这个flaot 为什么要清除,作为小白来说直接颠覆了我之前学的内容,因为之前学的东西虽然碰到float后,脱离文档流后给兄弟元素或者父元素造成影响,但是都是通过option来定位 要么绝 ...
- 【Sql server: T-Sql 技术内幕 系列】之索引篇
本文系 T-Sql技术内幕系列读后感. 用过数据库的程序猿都知道,索引可以极大的优化sql语句的执行时间,但是您要问我,怎么减少的,我只能说:"抱歉,我也不太清楚." 带着这个疑惑 ...
- 位运算(6)——Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits ...
- Form表单元素
Form表单元素 action method input: name value type: text password button radio checkbox file submit reset ...
- LeetCode刷题系列——Add Two Numbers
题目链接 这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作). class ListNode{ int val; ListNode next; ListNo ...
- jquery简介(一)
摘要:简要介绍jquery的起源,以及为什么需要使用jquery. jquery的优点 jquery体量小,加载速度快,其本身具有的功能使JavaScript应用程序开发人员的工作变得分外轻松.其中最 ...
- To find names containing exactly five characters, use “^”and “$”to match the beginning and end of the name, and five instances of “.”in between: mysql
To find names containing exactly five characters, use “^”and “$”to match the beginning and end of th ...
- Hadoop ->> Name node/Data node和Job tracker/Task tracker的区别
刚好看到关于Name node/Data node和Job tracker/Task tracker的解释,一开始有点混淆,以为说Job tracker必须运行在Name node上,他们俩有依赖或者 ...
- Lucene.net入门学习(结合盘古分词)(转载)
作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/3972233.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显 ...
- oracle_great_integration_译文
website:https://www.oracle.com/corporate/features/great-integrations.html Great Integrations(伟大的整合) ...