容器&集合-零基础学习

 

  1. Collection
    1. 层次结构 中的根接口。
    2. Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
    3.  继承关系图:
  2. List
    1. 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
  3. Set
    1. Set 接口是Collection的子接口,Set接口没有提供额外的方法,但实现 Set 接口的容器类中的元素是没有有顺序的,而且不可以重复。
    2. Set 容器可以与数学中“集合”的概念相对应。
    3. 实现类:
      • LinkedHashSet:具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
      • HashSet:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
      • TreeSet:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
    4. TreeSet:是自然顺序对元素排序,适合做索引。
  4. Map
    1. 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
  5. Map的实现类
    1. 实现类有HashMap、TreeMap、Hashtable、LinkedHashMap
  6. Map的常用方法
    1. V put(K key, V value)
      • 将指定的值与此映射中的指定键关联(可选操作)。
    2.  V get(Object key)
      • 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
    3. boolean isEmpty()
      • 如果此映射未包含键-值映射关系,则返回 true。
    4.  void clear()
      • 从此映射中移除所有映射关系(可选操作)。
    5.  V remove(Object key)
      • 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
    6.  int size()
      • 返回此映射中的键-值映射关系数。
  7. hashcode
    1. hashcode是一种编码方式,在Java中,每个对象都会有一个hashcode,Java可以通过这个hashcode来识别一个对象。至于hashcode的具体编码方式,比较复杂(事实上这个编码是可以由程序员通过继承和接口的实现重写的),可以参考数据结构书籍。而hashtable等结构,就是通过这个哈希实现快速查找键对象。这是他们的内部联系,但一般编程时无需了解这些,只要知道hashtable实现了一种无顺序的元素排列就可以了。.
    2. 两个对象值相同(x.equals(y) == true),则一定有相同的hash code。
    3. 以下是java语言的定义:
      • 对象相等则hashCode一定相等;
      • hashCode相等对象未必相等。
    4. 这也涉及到如何写自定义的hashCode方法的问题:必须符合以上条件。
    5. Collection类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法;
    6. 对于自定义类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。
    7. 哈希算法的本质就是通过算法,快速定位到我们存储东西的地方
  8. hashcode代码示例:
    1. public static void main(String[] args) {
      		String s1 = "通话";
      		String s2 = "重地";
      		System.out.println(s1.hashCode()==s2.hashCode());
      		System.out.println(s1.equals(s2));
      }

       

  9. 增强for循环
    1. 语法示例:
    2. 	//增强for循环
      	for (String s : l1) {
      		System.out.println(s);
      	}

       

  10. Iterator迭代器
    1. 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
    2. Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
    3. Iterator接口的方法:
      • hasNext();
        1. 如果仍有元素可以迭代,则返回 true。
      • next();
        1. 返回迭代的下一个元素。
      • remove();
        1. 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
    4. 在遍历的过程中正确的移除某一个元素使用Iterator类的remove()方法。
    5. 代码案例:
      • 		while(iterator.hasNext()){
        			String s = iterator.next();
        			if(s.equals("c3")){
        				//c.remove("c3");//错误,不能使用集合的remove方法
        				iterator.remove();
        			}
        		}

         

  11. Collections
    1. 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法。
  12. 常用方法
    1. void sort(List)
      • 对List容器内的元素排序
    2. void shuffle(List)
      • 对List容器内的对象进行随机排列
    3. void reverse(List)
      • 对List容器内的对象进行逆续排列
    4. void fill(List, Object)  
      • 用一个特定的对象重写整个List容器
    5. void copy(List dest,List src)
      • 将src List容器内容拷贝到dest List容器
    6. int binarySearch(List, Object)
      • 对于顺序的List容器,采用折半查找的方法查找特定对象(Integer 不能,String 可以)
  13. Arrays工具类
    1. 此类包含用来操作数组(比如排序和搜索)的各种方法。
  14. 常用方法
    1. Arrays.toString
      • 将数组转换成字符串输出
    2. Arrays.sort
      • 数组排序
    3. Arrays.hashCode
      • 得到数组的hashCode
    4. Arrays.fill
      • 数组元素填充
  15. Comparable<T>比较器
    1. 此接口强行对实现它的每个类的对象进行整体排序。
    2. 这种排序被称为自然排序,类的compareTo方法被称为它的自然比较方法。
    3. 比较器中的方法:
      • compareTo(T o):比较此对象与指定对象的顺序。
    4. 对于自定义类,需要使用Collections的排序方法,该自定义类必须实现比较器的接口,并重写抽象方法。
  16. 泛型:
    1. JDK1.4以前类型不明确:
      • 装入集合的类型都被当作Object对待,从而失去自己的实际类型。
      • 从集合中取出时往往需要转型,效率低,容易产生错误。
    2. JDK1.5后增加了泛型,好处:
      • 增强程序的可读性和稳定性。
  17. Map.Entry<K,V>嵌套类
    1. 映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。
  18. 常用方法:
    1. getKey()
      • 返回此项对应的键。
    2. getValue()
      • 返回此项对应的值。
  19. HashMap与HashTable的区别:
    1. HashMap 键值均可为空
    2. HashTable 键值均不能为空
    3. HashTable 线程安全

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值