Java中的集合(二)
2022/1/30 22:04:31
本文主要是介绍Java中的集合(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2、Set接口
Set接口以散列形式存储数据,所以元素没有顺序,可以存储一组无序,唯一的对象;
Set的常用子接口有HashSet、LinkedHashSet、TreeSet。
2.1HashSet
HashSet存储一组无序,且唯一的对象,这里的无序是指元素的存储数据和遍历数据不一致。
/** * @author EA_emran */ public class LearnHashSet { public static void main(String[] args) { HashSet hashSet = new HashSet(); hashSet.add("Hello"); hashSet.add("Mysql"); hashSet.add("Hello"); hashSet.add("HTML"); hashSet.add("JavaSE"); System.out.println(hashSet); System.out.println(hashSet.size()); System.out.println("遍历HashSet"); Iterator iterator = hashSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } hashSet.remove("Hello"); System.out.println("删除之后遍历HashSet"); iterator = hashSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } } }
运行结果
2.2LinkedHashSet
LinkedHashSet存储一组有序,且唯一的对象(这里的有序是指,存储顺序和遍历顺序相同)
/** * @author EA_emran * LinkedHashSet除了存入顺序和遍历顺序相同外,其他和HashSet一样; * ==和equals的区别 */ public class LearnLinkedHashSet { public static void main(String[] args) { LinkedHashSet linkedHashSet = new LinkedHashSet(); linkedHashSet.add(new A(1)); linkedHashSet.add(new A(1)); Iterator iterator = linkedHashSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } } } class A{ private int num; public A(int num){ this.num = num; } @Override public boolean equals(Object o) { return true; } @Override public int hashCode() { return 1; } @Override public String toString() { return "A{" + "num=" + num + '}'; } }
==比较的是两个对象的内存地址;如果要判断内容相等,首先我们需要判断两个对象的hashCode相等,hashCode简单来说是将对象的内部信息如内存地址,属性值的等转换为一个散列值,这个散列值就是hashCode。
两个对象的hashCode相等这两个对象可能还不相等,但是两个对象的hashCode不相等,那么这两个对象一定不相等。
所以集合在两个对象是否相等的时候,先判断两个对象的hashCode是否相等,如果相等在用equals()进行进一步判断,这样能够减少equals方法的调用可以提高效率。
运行结果
2.2TreeSet
除了LinkedHashSet中可以存放有序元素外,TreeSet中也能存放有序数据,但它的有序是根据内部集合自动给所有元素升序排列,遍历时也会按照升序的顺序遍历。
/** * @author EA_emran */ public class LearnTreeSet { public static void main(String[] args) { TreeSet treeSet = new TreeSet(); treeSet.add(new B(4)); treeSet.add(new B(6)); treeSet.add(new B(1)); treeSet.add(new B(3)); treeSet.add(new B(2)); treeSet.add(new B(12)); treeSet.add(new B(5)); treeSet.add(new B(1)); System.out.println(treeSet); System.out.println("长度:"+treeSet.size()); System.out.println("遍历"); Iterator iterator = treeSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } System.out.println("================="); } } class B implements Comparable{ private int num; public B(int num){ this.num = num; } @Override public int compareTo(Object o) { /** * 返回值: * 1表示A大于B * 0表示A等于B * -1表示A小于B */ B b = (B) o; if (this.num > b.num){ return 1; }else if(this.num == b.num){ return 0; }else { return -1; } } @Override public String toString() { return "B{" + "num=" + num + '}'; } }
这篇关于Java中的集合(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)