• 5.9 容器


    容器(Collection)
    数组是一种容器, 集合也是一种容器
    java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器
               (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组, 数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内存, 随便往里添加)     

    Collection   目前来说比较重要的两个子接口List,set。

     add()添加元素      addAll (  )往一个集合添加另一个集合     删除:remove(索引)  

    接口: 

    import java.util.ArrayList;
    import java.util.Collection;
    
    public class Test {
    
    	public static void main(String[] args) {
                    Collection m = new ArrayList();  //接口不能直接new,实现类 ArrayList可以
    		
    		m.add(123);  
    		m.add("aaa");
    		m.add(new Person());
    		
    		m.remove(new Person()); 
    		m.remove(new Integer(123));
    		
    		System.out.println(m.size()); // 1
    		System.out.println(m); // aaa 
    			
    	}
    
    }            
    

    List 接口:*ArrayList 和 LinkedList 的区别

    List接口(可以重复, 有顺序)
        *ArrayList---实现类(以数组为底层的实现机制)
          查询速度快, 但是增删改效率低
        LinkedList---实现类(以链表为底层的实现机制)
          查询速度慢, 增删改的效率高
          有顺序, 可以重复

    Collection接口的使用
    Collection<String> c = new ArrayList<String>();
    问题:
    为什么不直接写ArrayList<String> a = new ArrayList<String>();
    c.add(参数类型必须是Object)

    c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, 自定义的类, 需要自己重写父类的equals方法

    重写equals方法, 也应该重写hashCode方法

    hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址, 所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.LinkedList;
    
    public class Test {
    
    	public static void main(String[] args) {
    		Collection m = new LinkedList();
    		
    		m.add(123);
    		m.add("aaa");
    		m.add(new Person());
    		
    		m.remove(new Person());     //没删掉     需要重写e方法
    		m.remove(new Integer(123));
    		
    		System.out.println(m.size()); //   打印出2
    		System.out.println(m); // 打印出[aaa,Person[啥也没有]] 
    		
    	
    	}
    
    }
    


    List接口:
    有顺序, 可以重复添加
    get
    set(有一个返回值要注意 !) 
    add
    remove(int)
    remove(Object) 
    indexOf     返回某个对象在这个集合中第一次出现的索引位置
    lastIndexOf      返回某个对象在这个集合中最后一次出现的索引位置
    retainAll(Collection)----返回一个boolean值,
    当list的内容被改变的时候返回true, 否则返回false

    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    
    	public static void main(String[] args) {
    		List list1 = new ArrayList();
    		list1.add("aaa");
    		list1.add(new Person());
    		list1.add("123");
    		
    		
    		
    		Object o = list.get(2);      //打印123
    		System.out.println(o);      
    		Object o2 = list.set(2, 456);   //123改成了456
    		System.out.println(o2);       //有返回值,会把替换的对象封装变成返回值
    		System.out.println(list);
    		
    		list.remove(1);     //移出new person
    		list.remove("aaa");     //移出aaa
    		System.out.println(list);
    		System.out.println(list.indexOf(new Person()));   //打印出1
    		
    		
    		
    		
    	}
    
    }
    

    retainAll(Collection)----返回一个boolean值,    
    当list的内容被改变的时候返回true, 没有改变返回false    

    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    
    	public static void main(String[] args) {
    		List list1 = new ArrayList();
    		list1.add("aaa");
    		list1.add("bbb");
    		list1.add("ccc");
    		
    		List list2 = new ArrayList();
    		list2.add("aaa");
    		list2.add("bbb");
    		list2.add("ccc");
    
    		System.out.println(list1);
    		System.out.println(list2);
    		boolean f = list1.retainAll(list2);
    		System.out.println(f);
    		System.out.println(list1);
    		System.out.println(list2);
    		
    		boolean f2 = list1.equals(list2);
    		System.out.println(f2);
       }
    }
    

    Set接口(不允许重复, 没有顺序)
    Set接口中的方法没有自己定义的, 全部都是继承自Collection
        *HashSet---实现类(以哈希码表为底层的实现机制)  一定要重写equals和hashCode 
        TreeSet---实现类(以二叉树(一种数据结构)为底层的实现机制)
        没有顺序, 不可以重复(可以互相equals就叫重复)

      

      

      

  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/syx1997/p/9021265.html
Copyright © 2020-2023  润新知