JavaSE set集合学习总结

Set集合

无序,没有下标,集合中的元素不重复。

HashSet

打印结果去重 且无序。

例子

public static void main(String[] args) {
    HashSet<Person> hs = new HashSet<Person>(); //定义了一个Person类
    hs.add(new Person("张三",23));
    hs.add(new Person("张三",23));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));

    System.out.println(hs.size());

}

当打印对象时 不会自动去重,需要重写equals和hashcode方法,重写的方法再Person类中重写。

LinkedHashSet

可以理解为有序的HashSet

如何存储就如何打印。

例:利用LinkedHashSet去除Arraylist中的重复元素。

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("a");
    list.add("a");
    list.add("b");
    list.add("b");
    list.add("b");

    getSingle(list);

    System.out.println(list);

}

private static void getSingle(List<String> list) {
    // TODO Auto-generated method stub
    LinkedHashSet<String> llist = new LinkedHashSet<String>();
    /*
     * for (String string : list) { llist.add(string); }
     */
    llist.addAll(list);
    list.clear();
    list.addAll(llist);
}

Treeset

Treeset用来排序。

创建一个Treeset,在去除重复元素的同时排序。

private static void demo1() {
    TreeSet<Integer> ts = new TreeSet<Integer>();
    ts.add(1);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(2);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(3);

    System.out.println(ts);
}

在比较对象时

private static void demo2() {
    TreeSet<Person> ts = new TreeSet<>();
    ts.add(new Person("张三", 23));
    ts.add(new Person("李四", 24));
    ts.add(new Person("王五", 25));
    ts.add(new Person("赵六", 26));
    ts.add(new Person("张三", 23));

    System.out.println(ts);
}

需要重写Person类里的比较器(comparable接口中 实现的comparaTo方法)

以下为ComparaTo方法在Person类中的重写 (Person类要继承Comparable接口。)

public int compareTo(Person o) {
    // TODO Auto-generated method stub
    int lenth = this.name.length() - o.name.length();//名字长度为主要判断条件
    int num = lenth ==0? this.name.compareTo(o.name) : lenth;//年龄为次要条件
    return num == 0? this.age - o.age : num;
}

return的值为正 则排在被比对的对象的左边(前边),反之排在右边(后边),为零 则说明是同一个对象,则不加入Treeset

另一种比较器的构造

class ComparByLen implements Comparator{

  @Override
  public int compare(String s1, String s2)
  {
      int num = s1.length() -s2.length();
      return num==0? s1.compareTo(s2) : num;
  } 
private static void demo5() {
    TreeSet ts = new TreeSet(new ComparByLen());
    ts.add("aaaa");
    ts.add("z");
    ts.add("wc");
    ts.add("nba");
    ts.add("aaa");
    System.out.println(ts);
}

此时直接在新创建的类中传入构造器,ComparByLen();

原文地址:https://www.cnblogs.com/xijue/p/12342704.html

时间: 2024-10-12 12:09:19

JavaSE set集合学习总结的相关文章

java集合学习一

1.Set存放的元素是无序的不可重复. 2.List存放的元素为有序可重复. 3.重写equals方法,一般最好重写hasCode方法,当对象作为key的时候及索引,会使用hasCode方法进行查找. 4.容器对象在调用remove,contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和 hashCode方法.对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则.相等的对象 应该具有相等的hashCode. 5.ArrayList底

深入Java集合学习系列:HashMap的实现原理

参考文献 引用文献:深入Java集合学习系列:HashMap的实现原理,大部分参考这篇博客,只对其中进行稍微修改 自己曾经写过的:Hashmap实现原理 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 2. HashMap的数据结构: 在ja

深入Java集合学习系列:LinkedHashMap的实现原理

1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变.   LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序.   注意,此实现不是同步的.如果多个线程同时访问链接的哈希映射,而其中至少一个线

转:深入Java集合学习系列:HashSet的实现原理

0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素.HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个private static final Object PRESENT

集合学习思路

集合的分类 集合按照其存储结构可以分为两大类: 单列集合java.util.Collection 双列集合java.util.Map 学习集合的目标 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 集合学习的方式 学习顶层:学习顶层接口/抽象类中的共性方法,所有的子类都可以使用 使用底层:需要使用底层的子类创建对象使用 原文地址:https://www.cnblogs.com/wurengen/p/10860108.html

C# Stack 集合学习

Stack 集合学习 学习自:博客园相关文章 Stack<T>集合 这个集合的特点为:后进先出,简单来说就是新元素都放到第一位,而且顺序移除元素也是从第一位开始的. 方法一:Push(T value); 添加一个元素到集合顶部位置. 方法二:Pop(); 添加一个元素到集合顶部位置. 方法三:Peek(); 添加一个元素到集合顶部位置. Stack<string> sTest=new Stack<string>(); sTest.Push("D");

JavaSE——链表集合

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 链表集合: 优点:1.有序2.可以向前面和向后添加3.中间插入也很方便4.可以使用它实现简单队列模式 缺点:1.消耗内存有点大2.定位删除和定位查找都是比较满的 如下图:指定对象删除方法,按指定对象移除,就是找到你要找的那个对象然后移除,如下图这遍代码就是帮你找,如果没有找着,那就帮你找下家,如果还不对,又循环又帮你找下家,直到找到null为止 上面已经做好

Java 集合学习--集合概述

一.集合框架 集合,通常也叫容器,java中有多种方式保存对象,集合是java保存对象(对象的引用)的方式之一,之前学习的数组是保存对象的最有效的方式,但是数组却存在一个缺陷,数组的大小是固定的,但是往往我们在写程序的时候,并不知道需要保存多少个对象,或者是否需要用更复杂的方式来存储对象.而java提供集合类来解决这个问题.java中集合大家族的成员实在是太丰富了,有常用的ArrayList.HashMap.HashSet,也有不常用的Stack.Queue,有线程安全的Vector.HashT

Java 集合学习--ArrayList

一.ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. ①.实现 List 接口 List接口继承Collection接口,是List类的顶层接口,定义了大量方法,子类可进行个性化实现 ②.实现RandomAccess接口 RandomAccess 接口是一个标记接口,类似我们熟悉的Serializable接口,表明支持随机访问,在工具类Collections中有发挥其作用. ③.实现 Cloneable 接口 能否调用Object.clon