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接口的更多相关文章

  1. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  2. java 集合框架(二)Iterable接口

    Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...

  3. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  4. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  5. Java集合框架之Set接口浅析

    Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...

  6. Java集合框架之List接口浅析

    Java集合框架之List接口浅析 一.List综述: 毫无疑问List接口位于java.util包下,继承自 Collection接口 存储元素的特点: 有序可重复(有序:即存进去是什么顺序,取出来 ...

  7. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  8. Java集合框架中List接口的简单使用

    Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...

  9. Java集合框架的基础接口有哪些?

    Collection为集合层级的根接口.一个集合代表一组对象,这些对象即为它的元素.Java平台不提供这个接口任何直接的实现. Set是一个不能包含重复元素的集合.这个接口对数学集合抽象进行建模,被用 ...

  10. java集合框架部分相关接口与类的介绍

    集合基础 接口 Iterable //Implementing this interface allows an object to be the target of the "for-ea ...

随机推荐

  1. CSS3动画属性animation的基本用法

    CSS3新增了一个令人心动的属性:animation,尽管利用animation做出来的动画没有flash或者javascript做出的动画流畅绚丽,但是从代码量和浏览器性能上有着明显的优点. ani ...

  2. 循环结构 while

    while 循环语句可以根据某些条件重复执行一条t-sql 语句或一个语句块 语法: while (条件) begin 语句或语句块 end 程序调试 alt+f5 启动调试 f9 切换断点  f10 ...

  3. 清理widows的网络连接

    在听兄弟连李明老师的课程时,Samba配置时,window连接有时要清理,可以用以下命令 1.打开win的命令行. 2.输入net use,就会打印出当前缓存的连接上列表. 3.根据列表,一个个删除连 ...

  4. 从零开始的全栈工程师——JS面向对象( 六大继承 )

    一.对象克隆 var obj = { name:'li', age:23 } var obj2 = obj; // 这不是对象克隆 只是把obj的内存地址给obj2 1.for in克隆(浅拷贝)  ...

  5. C语言腾讯课堂(一)

    腾讯课堂:c语言从零到精通 1. 从第一个例子开始 #include <stdio.h> int main(void) { printf("hello, qin men \n&q ...

  6. SpagoBI 和 开源ERP(iDempiere)整合入门

    Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...

  7. 用C#实现工资计算公式动态编写

    1,工资计算公式 每一个企业都一定会用到工资计算,发工资是一件非常神圣的事情,而计算工资就是一项非常重要的工作.Excel有非常强大的公式功能,帮助了很多财务人员计算工资,但如果企业的人数比较多,而且 ...

  8. python 按值排序

    转自:http://www.cnpythoner.com/post/266.html,感谢分享! python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需 ...

  9. Mysql 服务无法启动解决办法

    1.我使用的是MySQL-5.7.10-winx64 版本,在安装后启动服务时出现 “服务无法启动”错误 2.解决办法为删除安装目录中的data文件,然后打开cmd调到自己的安装目录下输入mysqld ...

  10. Java—集合框架List

    集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组 ...