集合类的框架如下:

Collection(接口)
    List(接口):允许重复。
         ArrayList
         Vector
         LinkedList
    Set(接口):不允许重复
         HashSet
         TreeSet

Collection:由于collection是一个接口,不能实例化。

  1. collection中的方法(list继承他的方法,因此,以下方法都可以用)
    • add(E e) :往集合里新增一个元素   return  boolean
    • addAll(Collection c) 往一个集合中新增一个集合的所有元素
    • clear()  移除所有元素
    • contains(Object o)       如果此 collection 包含指定的元素,则返回 true。
    • containsAll(Collection c)    如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    • isEmpty()  如果此 collection 不包含元素,则返回 true。
    • remove(Object o)           从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
    • removeAll(Collection  c)   移除此 collection 中那些也包含在参数 collection 中的所有元素
    • retainAll(Collection  c)       交集
    • size()  返回此 collection 中的元素数
    • Object[] toArray()           返回包含此 collection 中所有元素的数组。
    • Iterator<E> iterator()    返回在此 collection 的元素上进行迭代的迭代器
          • //迭代器的几种使用方法
            
                    Iterator<String> iterator = collection.iterator();
            //第一种,使用iterator.next();
            String next = iterator.next();
            System.out.println("TestMain.main()X"+next);
            iterator.remove();
            System.out.println("TestMain.main()X"+next);
            String next2 = iterator.next();
            System.out.println("TestMain.main()X"+next2);
            //第二种,iterator.hasnext()
            while (iterator.hasNext()) {
            String string = (String) iterator.next();
            System.out.println("TestMain.main()"+string);
            }
                 //第三种,for循环遍历
                    for (Iterator iterator2 = collection2.iterator(); iterator2.hasNext();) {
                        String string = (String) iterator2.next();
                    }

  2,list,是collection的子类

    • 遍历list中的元素,可以用iterator迭代器,也可以用list自己的迭代器ListIterator(listiterator是iterator的一个子接口)
    • //list接口
      List list=new ArrayList();
      list.add("hello");
      list.add("world");
      list.add("!"); //list特有的遍历方式
      //第一种,不适用迭代器
      for(int i=0;i<list.size();i++){
      Object object = list.get(i);
      System.out.println("TestMain.main()"+object); }
      //第二种,使用List特有的迭代器
      int i=0;
      //ListIterator listIterator = list.listIterator();
      while(listIterator.hasNext()){
      Object next = listIterator.next();
      System.out.println("ListDemo.main()"+next);
      listIterator.set("student"+i++); }
      //listIterator
      while(listIterator.hasPrevious()){
      Object previous = listIterator.previous();
      System.out.println("TestMain.main()"+previous);
      }
      for(ListIterator listIterator=list.listIterator();listIterator.hasNext();){
      Object next = listIterator.next();
      System.out.println("TestMain.main()"+next);
      }

  3,ArrayList(上面的都可以实现,因为ArrayList是他们的子类)

    • ArrayList特有的方法(增强型for循环JDK1.5之后才有的) 
    • for (Object object : arrayList) {
      System.out.println("TestMain.main()"+object);
      }
    • 需要注意的是:增强性for循环中不能同时去增加或删除集合里面的元素。不然会报java.util.ConcurrentModificationException的错误。
    • 正确的说法应该是,要删除list里面的元素,有两种方式,一种是通过list.size()做for循环,另一种是通过iterator迭代器删除(迭代器删除的时候不能通过list.remove删除,只能通过iterator.remove删除)如下所示:
    • for (Iterator iterator = list.iterator(); iterator.hasNext();) {
      Object object = (Object) iterator.next();
      //list.remove(object);运行时会报错
      iterator.remove();//运行成功
      }

 4,set 

    •  set不允许重复。
    • 实现原理:实际上用的是hashmap函数,而hashmap底层依赖的是哈希表。set的添加功能底层依赖hashcode与equals两个方法。
    • 具体代码实现如下
    • hashset的底层实现是一个hashmap 哈希表
      map = new HashMap<>(); 映射(key,value) 一一映射 set.add("hello"); (“hello” present)
      set.add("world");
      set.add("cskaoyan");
      set.add("java");
      set.add("hello"); map.put(“hello” present) // Student s4 = new Student("zhaoliu",23);
      // Student s5 = new Student("zhagnsan",23); public V put(K key, V value) { //如果哈希表为空,新建一张哈希表
      if (table == EMPTY_TABLE) {
      inflateTable(threshold);
      } //如果为null,会插入一个key为null的映射(null, present)
      if (key == null)
      return putForNullKey(value); //通过这个key去计算其哈希值
      int hash = hash(key); "student" "student" 字符串的哈希值一样 //从哈希表里找对应的hash值的位置。如果没有返回0
      int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) {
      Object k;
      if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
      V oldValue = e.value;
      e.value = value;
      e.recordAccess(this);
      return oldValue;
      }
      } modCount++;
      addEntry(hash, key, value, i);
      return null;
      } final int hash(Object k) {
      int h = hashSeed;
      if (0 != h && k instanceof String) {
      return sun.misc.Hashing.stringHash32((String) k);
      } h ^= k.hashCode(); 100 // This function ensures that hashCodes that differ only by
      // constant multiples at each bit position have a bounded
      // number of collisions (approximately 8 at default load factor).
      h ^= (h >>> 20) ^ (h >>> 12);
      return h ^ (h >>> 7) ^ (h >>> 4);
      } 字符串的hashcode :结论是两个字符串存储的字符一样,hash值一样。
      public int hashCode() {
      int h = hash;
      if (h == 0 && value.length > 0) {
      char val[] = value; for (int i = 0; i < value.length; i++) {
      h = 31 * h + val[i];
      }
      hash = h;
      }
      return h;
      }

        

    • hashset的用法如下:
    •   HashSet<Object> hashSet = new HashSet<>();
      
              //插入的是基本类型
      /*hashSet.add("student");
      hashSet.add("add");
      hashSet.add("student");*/
      //如果插入的是自己写的类,如student类中,name,age.如何判断是否为同一个
      Student student1=new Student("zhangsan",11);
      Student student2=new Student("lisi",22);
      Student student3=new Student("zhangsan",11);
      hashSet.add(student1);
      hashSet.add(student2);
      hashSet.add(student3);
      //此时需要重写student的equals方法和hashcode方法 for (Object object : hashSet) {
      System.out.println("TestMain.main()"+object);
      }

5,map

    • map接口(映射),Map<K,V>,K - 此映射所维护的键的类型,V - 映射值的类型 
    • map的成员方法如下:
    • V put(K key,V value)
    • V remove(Object key)
    • void clear()
    • boolean containsKey(Object key)
    • boolean containsValue(Object value)
    • boolean isEmpty()
    • int size()
    • V get(Object key)
    • Set<K> keySet()
    • Collection<V> values()
    • Set<Map.Entry<K,V>> entrySet()
    • hashmap案例如下
    • HashMap<String,String>
      HashMap<Integer,String>
      HashMap<String,Student>
      HashMap<Student,String>

   6,map和collection的区别

    • Map是双列的,Collection是单列的
    • Map的键唯一,Collection的子体系Set是唯一的
    • Map集合的数据结构值针对键有效,跟值无关
    • Collection集合的数据结构是针对元素有效

               

    

Collection类相关总结的更多相关文章

  1. C#异常类相关总结

    C#异常类相关总结 C#异常类相关总结 C#异常类一.基类ExceptionC#异常类二.常见的异常类1.SystemException类:该类是System命名空间中所有其他异常类的基类.(建议:公 ...

  2. Class类相关

    Class类是java.lang包中的类,该类的实例可以帮助程序创建其他类的实例或者取得其他类的对象的内部信息 使用class类获得一个类相关的class类(注意得到的是class类,不是相关的类) ...

  3. Python学习笔记008_类_对象_继承_组合_类相关的BIF

    # 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它 ...

  4. 多线程(二)~Thread类相关的API介绍

      一.线程安全问题:     当我们使用多个线程操作统一方法内的局部变量的时候,每个局部变量在当前线程里都有自己的副本,这种情况是不会出现线程安全问题的.当我们两个线程同时操作全局变量的时候,有可能 ...

  5. C#图解教程学习笔记——类相关的概念

    一.一些基本概念1. 字段:隶属于类的变量,即类的成员变量.2. 方法:隶属于类的函数,即类的成员函数.3. 实例成员:类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员. 改变一个实例字段 ...

  6. Collection类及常用API

    Collection类及常用API Collection—类集工具类,定义了若干用于类集和映射的算法,这些算法被定义为静态方法,具体查看api文档; a)  public static void so ...

  7. Python 基础之面向对象之类中的方法和与类相关的魔术属性以及反射

    一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog() ...

  8. 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解

    PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...

  9. PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解

    本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习 ...

随机推荐

  1. crawler: 爬虫的基本结构

    目前我所知道的爬虫在获取页面信息上,分为静态爬虫和动态爬虫:静态爬虫主要用于获取静态页面,获取速度一般也比较快:但是现在很多网站的页面都是采用动态页面,当我们用爬虫去获取信息的时候,页面的信息可能还没 ...

  2. Markdown编辑器简单总结

    字体大小: #1 ##2 添加链接: 文字链接 [blog](http://yalantis.com/blog/how_we_created_tab_bar_animation_for_ios/?ut ...

  3. Sublime Text以及Package Control安装方法

    官方下载:Sublime Text 中国论坛:Sublime 论坛 Sublime Text 是一个代码编辑器,具有漂亮的用户界面和强大的功能,并且它还是一个跨平台的编辑器,同时支持Windows.L ...

  4. python 中的map(), reduce(), filter

    据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...

  5. SampleDateFormat进行日期格式化

    我们生成的日期 ,可能不是我们想要的格式,这时候,就要用到SampleDateFormat类的format方法转换一下, SampleDateFormat是java.text包下的一个常用日期类 这个 ...

  6. JavaScript杂谈(顺便也当知识积累)

    JavaScript版本 JavaScript的普及使得其于1997年正式成为国际标准,其官方名称为ECMAScript 1999年定稿第三版ECMAScript标准,简称ES3 2009年重大改进的 ...

  7. Mobius 反演

    上次看莫比乌斯繁衍反演是一个月前,讲道理没怎么看懂.. 然后出去跪了二十天, 然后今天又开始看发现其实并不难理解   开个这个仅记录一下写过的题. HAOI 2011 B   这应该是莫比乌斯反演的模 ...

  8. HIbernate的写法总结

    普通表操作 普通操作莫过于CRUD,建好表了之后对表的数据进行操作.详见代码. package package2; import org.hibernate.Session; import org.h ...

  9. 自然语言21_Wordnet

    QQ:231469242 欢迎喜欢nltk朋友交流   http://baike.baidu.com/link?url=YFVbJFMkZO9A5CAvtCoKbI609HxXXSFd8flFG_Lg ...

  10. 在 Mac OS X 终端里使用 Solarized 配色方案

    MacOS X 终端solarized配色 相信长期浸泡在终端和代码的小伙伴们都有一套自己喜爱的配色方案.以前一直在用简单.适合阅读的 Terminal.app 配色方案,换到 MacBook Pro ...