java集合框架中TreeSet的奇怪现象两个

编程技术  /  houtizong 发布于 3年前   409
先贴出输出:
TreeSet Integer
集合为:[-1, 0, 6, 8, 66]
更改temp为:55
集合为:[-1, 0, 6, 8, 66]集合并未因为temp的改变而改变,说明java对基本类型做了特殊处理
-----------------------------
TreeSet 自定义的Int
集合为:[6, 66]
treeSet.contains(6)=  true
treeSet.contains(66)=  true
更改temp为:-55
集合为:[6, -55]集合因为temp的改变而改变,但排序并未改变
treeSet.contains(6)=  false
treeSet.contains(66)=  false
treeSet.contains(-55)=  true


代码:
package Tests;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;import java.util.Set;import java.util.SortedSet;import java.util.TreeSet;public class testSet {public static void main(String[] args) {// testHashSet(); testTreeSet();//数据自动排序 System.out.println("-----------------------------");testTreeSetInt();// 数据自动排序// testLinkedList();}private static void testLinkedList() {LinkedList<Object> list = new LinkedList<Object>();list.add("asdf");list.add("2");list.add(-1);list.add(55);System.out.println(list);Iterator<Object> it = list.iterator();while (it.hasNext()) {System.out.print(it.next() + "   ");}System.out.println();ListIterator<Object> lit = list.listIterator(1);// 从第2个开始System.out.print("前向:");while (lit.hasNext()) {// 前向System.out.print(lit.next() + "  ");// System.out.println("序号:"+lit.nextIndex());}System.out.println();System.out.print("后向:");while (lit.hasPrevious()) {// 后向System.out.print(lit.previous() + "  ");lit.previousIndex();}System.out.println();}private static void testTreeSet() {System.out.println("TreeSet Integer");SortedSet<Integer> treeSet = new TreeSet<Integer>();Integer temp = 66;treeSet.add(temp);treeSet.add(6);treeSet.add(8);treeSet.add(-1);treeSet.add(0);treeSet.add(6);treeSet.add(6);temp = 55;// 奇怪现象System.out.println("集合为:"+treeSet);System.out.println("更改temp为:"+temp);System.out.println("集合为:"+treeSet+"集合并未因为temp的改变而改变,说明java对基本类型做了特殊处理");//System.out.println("treeSet.contains(6)=  " + treeSet.contains(6));//for (int integer : treeSet) {//System.out.println(integer == 0);//}}private static void testTreeSetInt() {System.out.println("TreeSet 自定义的Int");SortedSet<Int> treeSet = new TreeSet<Int>();Int temp = new Int(66);treeSet.add(temp);treeSet.add(new Int(6));// treeSet.add(new Int(-8));//是否注释以下几行6和temp的错误不同// treeSet.add(new Int(100));// treeSet.add(new Int(222));// treeSet.add(new Int(333));// treeSet.add(new Int(444));System.out.println("集合为:"+treeSet);System.out.println("treeSet.contains(6)=  " + treeSet.contains(new Int(6)));//正确System.out.println("treeSet.contains(66)=  " + treeSet.contains(new Int(66)));//出错temp.x = -55;// 奇怪现象System.out.println("更改temp为:"+temp.x);System.out.println("集合为:"+treeSet+"集合因为temp的改变而改变,但排序并未改变");System.out.println("treeSet.contains(6)=  " + treeSet.contains(new Int(6)));System.out.println("treeSet.contains(66)=  " + treeSet.contains(new Int(66)));System.out.println("treeSet.contains(-55)=  " + treeSet.contains(new Int(-55)));//出错}static class Int implements Comparable<Int> {int x;public Int(int x) {super();this.x = x;}@Overridepublic int compareTo(Int o) {return x - o.x;}@Overridepublic String toString() {return ""+x;}}private static void testHashSet() {System.out.print("hashSet");HashSet<Object> hset = new HashSet<Object>();hset.add(5);hset.add("asdf");hset.add(-9.999);hset.add(5);hset.add("asdf");hset.add(-9.999);System.out.println(hset);}}

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客