集合

集合:

集合就是一个容器。

    对于集合内的各个对象很容易将其存放到集合中,也很容易将其从集合中取出来,还可以按照一定的顺序放入。

    对集合可以进行遍历、添加、删除以及查找制定的对象。集合的体系结构如下图。

   

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。1此接口1通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

1、 Collection

   //Collection集合
        Collection c = new ArrayList();
        String s = new String("hello");    
        Student s11 = new Student(21,"张三",'m');
        Date d = new Date();
        //添加一个元素
        c.add(s);
        c.add(s11);
        c.add(d);
        //  删除
        c.remove("hello");
        
        //迭代器
         Iterator iter = c.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
        //集合的元素个数
        System.out.println(c.size());
        //清除集合中的元素
        c.clear();
        System.out.println(c.size());

        //求元素交集         

          Collection c1 = new ArrayList();  
            Collection c2 = new ArrayList();  
              
            //2.添加元素。  
            c1.add("abc1");  
            c1.add("abc2");  
            c1.add("abc3");  
            c1.add("abc4");  
              
            c2.add("abc2");  
            c2.add("abc3");  
            c2.add("abc5"); 
            //将c1中和c2中不同元素剔除,剩余元素为c1,c2中共有的元素,交集。
            c1.retainAll(c2);
            System.out.println(c1);

2、List  |--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引,允许重复元素。

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。列表通常允许重复的元素。

   List<Student> collection = new ArrayList<Student>();
        //添加
        collection.add(new Student(21,"张三",'M'));
        collection.add(new Student(22,"李四",'M'));
        collection.add(new Student(23,"王麻子",'W'));
        collection.add(new Student(23,"王麻子",'W'));
        //删除
        collection.remove(new Student(22,"李四",'M'));
        //修改
        collection.set(0,new Student(28,"李四",'M') );
        //查
        Student s = collection.get(2);
        //迭代器
        Iterator< Student> iter = collection.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }

 3 、Set    |--Set:无序(存入和取出顺序有可能不一致),不允许重复元素,必须保证元素的唯一性。

Set<Student> coll = new HashSet<Student>();
        Student s1 = new Student(24,"张三",'M');
        Student s2 =new Student(24,"张三",'M');
        coll.add(s1);
        coll.add(s2);
//        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));
        System.out.println(coll.size());
        Iterator< Student> iter = coll.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }

Set方法不允许重复,所以就要有判断重复的方法,就要在添加实体类里面重写equals和hashcode方法来判断重复。

转载 相关知识点equals方法详细介绍:https://blog.csdn.net/javazejian/article/details/51348320  

总结:默认情况下也就是从超类Object继承而来的equals方法与‘==’是完全等价的,比较的都是对象的内存地址,但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符的序列,而不再是内存地址。

转载hashSet原理分析:https://blog.csdn.net/w3045872817/article/details/73294491

 * 因此使用HashSet 的add()方法插入元素的时候: 
|- HashSet会自动调用元素的hashCode()方法。 
|- 然后根据hashCode()方法的返回值 来决定元素要插入的位置。 
|- 如果该位置上已经存在元素了 则会调用该元素equals()方法进行比较。 
|- 如果两个元素相等 则丢掉欲插入的元素。 
|- 如果两个元素不相等 则新元素会被加入到另一个位置(通过冲突检测来决定哪一个位置),这样就消除了重复。 

 

TreeSet

Collection<Student> coll = new TreeSet<Student>(); 
        coll.add(new Student(24,"张三",'M'));
        coll.add(new Student(22,"李四",'M'));
        coll.add(new Student(23,"王麻子",'W'));
        Iterator< Student> iter = coll.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }

对于TreeSet集合  ,比较顺序的时候要在改实体类里面实现compareTo接口。

4、Map 有关于map的详细介绍  https://blog.csdn.net/modaiairen524/article/details/79484060

      取键值图解

Map<String, Student> map = new HashMap<String,Student>();
        
        map.put("aaa",new Student(21,"张三",'M'));
        map.put("bbb", new Student(21,"张三",'M'));
        //取实体,迭代
        Set<Entry<String, Student>> entry = map.entrySet();
        Iterator<Entry<String, Student>> enty= entry.iterator();
        Entry<String, Student>    tt =    enty.next();
        System.out.println( tt.getKey() +  tt.getValue());
        
        System.out.println(map);
        

  取键集:图解

Map<String, Student> map = new HashMap<String,Student>();
        
        map.put("aaa",new Student(21,"张三",'M'));
        map.put("bbb", new Student(21,"张三",'M'));
        //取键集,迭代
        Set<String>    keys =  map.keySet();
        Iterator<String> iter = keys.iterator();
        while(iter.hasNext()) {
        System.out.println(    iter.next());
        }
        

取值集:

 

Map<String, Student> map = new HashMap<String,Student>();
        
        map.put("aaa",new Student(21,"张三",'M'));
        map.put("bbb", new Student(21,"张三",'M'));
        //取值迭代
        Collection<Student>   studes =  map.values();
        Iterator<Student>    iter =   studes.iterator();    
        while(iter.hasNext()) {
            System.out.println(    iter.next());
          

   1.  用到hashSet或HashMap就要想到哈希表,就要想到哈希就要想到 hashCode ()  与equals()让元素具备可比较性

   2. 用到treeSet , TreeMap就要想到二叉树,就要想到实现Comparable接口,重写compareTo()让元素具备可比较性

  3. 算数值尽量拿==比较,String类型的和对象类型的拿equals比较.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值