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); }
}

最新文章

  1. 写出好的 commit message
  2. Linear Algebra lecture10 note
  3. 手动获取酷我Mp3外链
  4. 64位ubuntu安装32位jdk
  5. EasyUI Accordion下的Panel面板初始化时全部折叠
  6. java中的==和equals的区别
  7. 换模板,修改了一下css,清新多了~
  8. SWT的文件选择对话框I的使用
  9. RFC 协议下载方法
  10. linux iptables 配置
  11. 基于EM的多直线拟合
  12. zookeeper源码分析-版本生成
  13. hdu 2612 多终点BFS
  14. 关于安卓手机的牛逼软件termux使用
  15. [Mean of range in array]
  16. 简述openstack
  17. pre-commit 钩子,代码质量检查:在 vue-cli 3.x 版本中,已经使用尤大改写的yorkie,yorkie实际是fork husky,然后做了一些定制化的改动,使得钩子能从package.json的 &quot;gitHooks&quot;属性中读取
  18. 设置win版vim启动项[利刃篇]
  19. java实现Md5加密工具类
  20. Testlink1.9.5的安装配置

热门文章

  1. 表单提交前的confirm验证提示
  2. jqgrid 上移下移单元格
  3. jquery点滴总结
  4. node.js async/await 继发执行与并发执行
  5. git获取别人远程dev分支上的代码
  6. EF 取出demical数据,但需要去点小数,排序
  7. 【学习笔记】Java中生成对象的5中方法
  8. html5 填表 表单 input output 与表单验证
  9. learn OpenStack by picture
  10. PLSQL Developer中几个功能