精华内容
下载资源
问答
  • Set集合不允许存储重复元素原理

    千次阅读 2020-06-22 20:46:38
    Set集合不允许存储重复元素原理 package com.Set; import java.util.HashSet; /* Set集合不允许存储重复元素原理 */ public class Demo02HashSetSaveString { public static void main(String[] args) { //创建...

    Set集合不允许存储重复元素原理

    package com.Set;
    
    import java.util.HashSet;
    /*
        Set集合不允许存储重复元素原理
     */
    public class Demo02HashSetSaveString {
        public static void main(String[] args) {
            //创建HashSet集合对象
            HashSet<String> set = new HashSet<>();
            String s1 = new String("abc");
            String s2 = new String("abc");
            set.add(s1);
            set.add(s2);
            set.add("重地");
            set.add("通话");
            set.add("abc");
            System.out.println(set);  //[重地, 通话, abc]
        }
    }
    

    01:Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复。

    1. set.add(s1);
      add方法会调用s1的hashCode方法,计算字符串“abc”的哈希值,哈希值是96354
      在集合中找有没有96354这个哈希值的元素,发现没有
      就会把s1存储在集合中
    2. set.add(s2);
      add方法会调用s2的hashCode方法,计算字符串“abc”的哈希值,哈希值是96354
      在集合中找有没有96354这个哈希值的元素,发现有(哈希冲突) s2会调用equals方法和哈希值相同的元素进行比较
      s2.equals(s1),返回true 两个元素的哈希值相同,equals方法返回true,认定两个元素相同
      就不会把s2存储到集合中
    3. set.add(“重地”);
      add方法会调用"重地"的hashCode方法,计算字符串"重地"的哈希值,哈希值是1179395
      在集合中找有没有1179395这个哈希值的元素,发现没有
      就会把"重地"存储在集合中
    4. set.add(“通话”);
      add方法会调用"通话"的hashCode方法,计算字符串"通话"的哈希值,哈希值是1179395
      在集合中找有没有"通话"这个哈希值的元素,发现有(哈希冲突)
      “通话"会调用equals方法和哈希值相同的元素进行比较"通话”.equals"重地"),返回false
      两个元素的哈希值相同,equals方法返回false,认定两个元素不同
      就把"通话"存储到集合中

    02:Set集合存储不重复的元素
    前提:存储的元素必须重写hashCode方法和equals方法
    在这里插入图片描述

    展开全文
  • java为什么吗list允许存储重复元素,而set不允许存储重复元素
  • Java Set( 不允许重复集合

    万次阅读 2018-03-09 21:07:30
    HashSet: 防止重复使用HashSet的class必须implements Comparable();ArrayList&lt;class&gt; classList=new ArrayList&lt;class&gt;(); HashSet&lt;class&gt; classSet=new HashSet&lt;...
    HashSet:  防止重复
    使用HashSet的class必须implements Comparable();
    ArrayList<class> classList=new ArrayList<class>();
    HashSet<class> classSet=new HashSet<class>();
    classSet.addAll(classList);     //addAll()可以复制其他集合的元素,效果就跟一个一个加进去一样


    但是仅仅这样做的话还是会有重复;
    HashSet如何检查重复?:hashCode()和equals():     //相同的对象必须hashCode()相同并且equals()返回true,但hashCode()相同的对象不一定相同。
    必须覆盖hashCode()和equals():   hashCode()的默认行为是对在heap上的对象产生独特的值,如果没有override过hashCode(),则该class的两个对象怎样都不会被认为是相同的。
    class class implements Comparable<class>{
    String title;
    public boolean equals (Object a){
         class s=(class)a;
         return title.equals(a.getTitle());
    }
    public int hashCode(){
    return title.hashCode();
    }
    }



    TreeSet:防止重复并保持有序
    TreeSet<Class> classSet=new TreeSet<Class>();  //调用没有参数的构造函数来用TreeSet取代HashSet意味着以对象的compareTo()方法来进行排序
    classSet.addAll(classList);
    要使用TreeSet,下列一项必须为真:
    *集合中的元素必须是有实现Comparable的类型,并覆盖了compareTo(Object o)方法。例如:
    class Book implements Comparable{
    String title;
    public int compareTo(Object b)
    {Book book=(Book)b;  return title.compareTo(book.title);}}


    或*使用重载、取用Comparator参数的构造函数来创建TreeSet。例如:
    class BookCompare implements  Comparator<Book>{
    public int compare(Book one,Booke two)
    {return one.title.compareTo(two.title);}}
    class Test{
    BookCompare bCompare=new BookCompare();
    TreeSet<Book> tree=new TreeSet<Book>(bCompare);}
    


    展开全文
  • 消除集合重复元素

    千次阅读 2018-07-25 10:48:43
    消除集合重复元素,根本考差点即list与set的区别。...知道两者的区别,就可以利用Set不允许重复值的特点,消除集合中的重复元素。 例: 1.利用ArrayList去除集合中重复字符串元素 ArrayList list = n...

    传送门:list、map、set的区别

    消除集合中重复元素,根本考差点即list与set的区别。
    简单点说:list 代表有索引编号的集合,可以存放重复的对象,可以在指定的位置插入对象。set存放不重复的对象,只能有一个null元素。

    知道两者的区别,就可以利用Set不允许重复值的特点,消除集合中的重复元素。

    例:

    1.利用ArrayList去除集合中重复字符串元素

    
            ArrayList list = new ArrayList();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("aa");
            list.add("bb");
    
           ArrayList newList = getSingle(list);
            System.out.println(newList);
        /*
        创建一个新的集合,存放去除重复元素后的元素。
    
          分析:1,创建新集合
             2,根据传入的旧集合获取迭代器
             3,遍历旧集合
             4,通过新集合判断是是否包含旧集合中的元素,如果包含,就不添加,否则才添加
        */
        public static ArrayList getSingle(ArrayList list){
                ArrayList newList = new ArrayList();     //创建新集合
                Iterator it = list.iterator();        //根据传入的集合旧集合获取迭代器
                while(it.hasNext()){          //遍历旧集合
                Object obj = it.next();       //记录每一个元素
                if(!newList.contains(obj)){   //如果新集合中不包含旧集合中的元素,则添加
                newList.add(obj);       
                }
            }
            return newList;//返回的集合即去掉重复元素后的集合
        }
    

    2.利用Set去除集合中重复字符串元素

    ArrayList list = new ArrayList();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("aa");
            list.add("bb");
            System.out.println("旧集合:"+list);
            Set set = new HashSet(list);
            List newList = new ArrayList(set);
            System.out.println("新集合"+newList);

    对比可见,set集合在实例化时可直接传递list参数。相比较利用arraylist遍历每一个元素,更加方便。

    展开全文
  • Set集合如何判断重复元素

    千次阅读 2019-04-20 15:06:00
    1.TreeSet子类是利用Comparable接口来实现重复元素的判断,但是Set集合的整体特征就是不允许保存重复元素。 2.HashSet判断元素重复是利用Object类中的方法实现的: -|对象编码:public int hashCode(); -|对象....

    1.TreeSet子类是利用Comparable接口来实现重复元素的判断,但是Set集合的整体特征就是不允许保存重复元素。

    2.HashSet判断元素重复是利用Object类中的方法实现的:

           -|对象编码:public int hashCode();

           -|对象比较:public boolean equals(Object obj);

    3.在进行重复元素判断的时候首先利用hashCode()进行编码匹配,如果该编码不存在表示数据不存在,证明没有重复,如果该编码存在了,则进一步进行对象的比较处理,如果发现重复了,则此数据是不能保存的。

    4.java程序中真正的重复元素的判断处理利用的就是hashCode()equals()两个方法共同作用完成的。

    5.只有在排序要求的情况下(TreeSet)才会利用Comparable接口实现。

    转载于:https://my.oschina.net/u/4107179/blog/3039690

    展开全文
  • Java中利用Set判断List集合中是否有重复元素

    万次阅读 多人点赞 2018-12-05 20:05:36
    我们需要找出重复元素,我们只需要返回一个Boolean类型就可以了 如果使用循环遍历的方式,将会消耗大量的性能 我们只需要将List集合转化为Set集合,再进行比较就可以实现了: 代码如下: package com.test; ...
  • Java中的Map允许重复元素吗?

    万次阅读 2018-06-22 14:37:05
    Java中常见的三个集合接口:List、Set、Map,已经知道List中是允许重复元素的,而Set中是不允许重复元素的,那么Map中允许重复元素吗?查阅资料,发现是可以的,因为map是无序的,它的查询需要通过key的值来...
  • set中的元素能相等重复的,这一点我知道,那么怎样才是(重复呢? 是hashcode相等?是地址相同?是元素的equal返回true? 猜测:先判断是不是同一个引用(地址),再判断equal 我自己做了...
  • Java哪些集合元素不重复

    万次阅读 2016-05-05 12:35:32
    Set < E > 是一个包含重复元素的 collection。更确切地讲,set 包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。常用的实现类是HashSet < E > 和 TreeSet 例如:Set<Integer> set = new ...
  • 集合中的重复元素去掉 package com.heima.test; import java.util.ArrayList; import java.util.LinkedHashSet; public class Demon_Test3 { /** * 将集合中的重复元素去掉 * 因为是去除集合中的元素,...
  • java什么集合元素不重复

    千次阅读 2016-09-29 08:56:56
    java什么集合的 元素不能重复的 hdnfdhsd132 | 浏览 1999 次 2015-11-17 10:...Set 集合不允许重复的。 Set为接口,常用的实现类是HashSet 举个例子: Set testSet = new HashSet(); testSet.add(1); testS
  • package set;... * Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是重复的元素。 * @param args */ public static void main(String[] args) { H...
  • Set中的元素为什么不允许重复

    万次阅读 2015-12-16 18:44:37
      为了弄清楚这个问题 , 我又看了一遍 Collection 部分 , 并且看了些其中的源码 , 觉得对其中的实现又明白了一点 ...Set 接口为我们提供了一个 add() 方法,以让我们添加元素。所以我们看一下在其实现类
  • 381. O(1) 时间插入、删除和获取随机元素 - 允许重复 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构。 注意: 允许出现重复元素。 insert(val):向集合中插入元素 val。 remove(val):当 val 存在...
  • 整理的Java List Set Map是否有序,元素是否允许重复的说明,如下图:
  • 集和里面的元素重复的 s = {1,2,3,4,5,6,6,3,3,2} print(s,type(s)) s1 = {1} print(s1,type(s1)) 运行: 如何定义一个空集合: s2 = {} #默认情况是dict,称为字典 print(s2,type(s2)) 运行: 定义一个...
  • Java中判断List集合中是否有重复元素

    千次阅读 2019-08-01 10:31:43
    我们需要找出重复元素,我们只需要返回一个Boolean类型就可以了 如果使用循环遍历的方式,将会消耗大量的性能 我们只需要将List集合转化为Set集合,再进行比较就可以实现了:代码如下:package com.test;import ...
  • 比如我一个集合中有[1,2,3,4] 另外一个集合中有[3,4,5,6] 它共同的元素是3。 第一种解决方案 思想:是定义一个空集合。然后把上面的二个集合双层for循环找出其共同的元素 List&lt;Integer&gt; list = ...
  • Redis集合类型-能添加重复元素

    千次阅读 2019-10-23 20:40:57
  • 当你想找个人说话的时候,才发现有些事情是能告诉别人的,有些事情是不必告诉别人的,有些事情是根本没有办法告诉别人的,而有些事情即使告诉了别人,你也会马上后悔,那么最好的办法 就是静下来,真正能平静自己...
  • 有序且不重复集合

    千次阅读 2018-01-10 18:47:08
    import java.util.LinkedList; public class SetList extends LinkedList{ ... 自定义一个不重复且有序的集合 */ private static final long serialVersionUID = 3612971767507405567L; @Override   pu
  • Java判断list集合中有没有重复元素

    千次阅读 2020-10-20 16:30:27
    public void main() { List<String> list=new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("c"); HashSet<String> hashSet = new ...hashSet.add(s)){ //有重复值 break; } } }
  • 最近在工作中遇到个打乱算法,需求是一个字符串集合,经过排序后,需要让相邻两个元素的值不同。 这里我将该算法分享出来,如果有性能更好的算法,也请大伙一起做个分享,也顺带当做笔记记录下来。 public static...
  • 集合的全排列(可包含重复元素)

    千次阅读 2016-08-09 15:56:33
    1.从右到左,找出当前序列中第一个违反递增规则的元素(相等违反)记为pivot 2.从右到左,找出当前序列中第一个大于pivot的元素记为change 3.交换pivot和change的位置 4.将pivot位置(是交换之前的位置)...
  • 注意: 允许出现重复元素。 insert(val):向集合中插入元素 val。 remove(val):当 val 存在时,从集合中移除一个 val。 getRandom:从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈...
  • List添加重复元素

    万次阅读 2015-08-04 09:38:42
    public static void main(String[] args) { Set<Long> set = new HashSet(); set.add(1L); set.add(1L); System.out.println(set); }
  • 由于在集合Set中, Set 中的元素不允许重复的。在此可以利用此方法。 例如:Set testSet = new HashSet(); testSet.add(1); testSet.add(2); testSet.add(3); testSet.add(1);中,打印这个testSet,只能获得元素 1...
  • Collection(集合):容器,用于存放对象(引用类型。... 查看Set(集):元素无序,重复 (没有索引)ArrayList(数组列表): 查询快,增删慢。 查看LinkedList(链表): 查询慢,增删快。HashSet(哈希表): 查询快,增删慢。L...
  • 用Iterator方法来判断元素是否重复,用equals()判断两个set是否相等, set存取元素是按哈希值排序, 示例代码 package test; import java.util.HashSet; import java.util.Iterator; import java.util....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 177,969
精华内容 71,187
关键字:

不允许重复元素的集合