• 集合


    array用来存储数据类型的容器; (数组接受的是对象object[] arr ;

                                 数组中可以存放任意的对象)

           问题:比较浪费内存,数组的容量是固定的,无法变化;

               存放数据类型不同意

     

     集合:存储对象的容器,对象类型是任意的,长度可变

        集合的结构:collection  接口跟接口,集合的公共方法都在接口(单列集合)

    集合的优势:集合中可以存放任意类型的对象,长度可变;

       数组只能同一种类型变量,长度固定

    集合只能存对象

           Collection   coll = new Array();

      使用集合的目的:可以使数据的增删改查更容易

    1添加元素:add( )            coll.add();

    2讲一个数组中的元素添加到另外数组中addAll(collection c);

                    Collection   coll1= new ArrayList<>();

                coll1.add(李四);

              coll1.add(coll);//将集合元素添加到打元素后面

    3 remove(object);a.removwall(b),删除a中含有的b元素

       

    4 清空所有的元素

          coll1.clear();

    5isEmpty;判断集合是否为空;

    6查找是否存在指定元素

     7collection 超接口

                        list        

    ----------->ArrayList 是存在一个数组,添加元素很慢,

                    维护的是一个object[],删查找很快 默认长度是10,当长度不够使增加0.5倍

         特有的方法:

                 ensureCapcity(int minCapacity)手动增加容量

                 trimTosize  调整集合容量刚好符合元素个数0

        -----------------》添加元素比较快,删查找慢,元素在内存中是无序的

     8

    collection 根接口
    * ---> List : 元素是有序 ,可以重复的
    * ---> Set : 元素是无序,不可重复的
    * List: 接口 (提供公有地方法)
    * --->ArrayList
    * ---> LinkList
    *
    List 中特有的方法:(list特有方法通过下标操作元素)
    1.增加 :
    add(int index, E element);
    addAll(int index, Collection<? extends E> c)
    将指定的位置保留为另外一个集合。
    List<E> subList(int fromIndex, int toIndex)

    2.获取:
    get(int index)

    3.查找:
    indexOf(Object o)
    lastIndexOf(Object o)

    //迭代器
    listIterator()

    4.删除
    remove(int index)

    5.更新:
    set(int index, E element)

    //List 集合中特有的方法 都是通过下标来操作的。

    contain(object);判断集合中是否含有某一对象,实际上还是以equals,如果比较的自定义的对象这个时候可能需要重写equals 和hashcode方法

    a.containsAll(b)判断a中shifou包含b集合;

    isEmp,判断集合是否为空。。。

    将集合转换为数组,toArrray();

    9

    迭代器 :
    * 用来操作集合中的元素,增删 , 获取集合中的对象。
    *
    * Iterator : 迭代器的超级接口 : 所有的迭代器接口都是继承Iterator
    *
    * 迭代器中常用的方法:
    * hasNext(); //判断当前指针指向的位置是否存在元素
    * next(); // 获取当前指针指向元素的。 当这个方法被调用一次后指针就会下一次。
    * remove(); // 删除最后一次出现对象

    迭代器使用的注意事项: 当你用迭代器来操作集合中的元素时,不要再用集合来操作元素
    * java.util.ConcurrentModificationException : 原因:用迭代器操作了属性后又用集合操作属性。
    */

       10LinkList

          1  集合对象

                     LinkedList list = new LinkedList();

                    list.add("小明");

                         System.out。println(list);

                    如果集合中没有找到元素,就会抛出异常

           2数据结构: 

                     list.push("狗蛋");向集合的锥站中推入一个值

                           pop ,与push(先进先出)

           list.offer();poll();

         3返回逆序迭代器对象

                 descendingIterator

    11      Vector  :描述的是一个线程安全的ArrayList使用和ArayList一样

              Vector 和ArrayList 的区别

                                      相同点:都是通过object 数组来实现的  

                                        不同点:1ArrayList 是线程不同步的,操作效率高,Vector 线程是同步的,效率低

                                                  2ArrayList 实在jdk1.2 出现,vect 实在1.0的时候出现的

      12

                  Set集合接口:继承Collection接口  ,特点:无序的不能用索引来取值

             

     13 哈希表:(表以桶式结构存放数据)

                    如果我计算的位置上没有任何元素,将对象放在位置上;

                  如果我计算的位置上已经存在对象,这个时候就将姚村的对象作比较  ;如果equals返回的是true,对象就是重复          的,false就把对象添加到该位置

        14  TreeSet:使用元素的自然顺序进行排序,底层使用二差数实现;

               注意点    1你存进去的对象需要具备自然排序的特性,那么存入的元素就会通过自然排序进行排序

                 2如果添加元素,不具备自然排序的特性,那么这个时候就必须实现comparable接口,将元素比较规则定义到comparTo方法中,  comparable比较规则:返回一个零,负数或者整数,分别表示相等,小与和大于

             

                           

        2往Treeset里添加对象的时候,如果对象有这个自然排序的特性,就按照自然排序进行排序

              3添加对象的时候,如果对象本身不具备自然排序,运行就会报错,如果要储存对象,那么对象的类就必须实现comparable接口把元素比较的规则定义写在compareTo中

            4添加元素,如果对象本身不具备自然排序的特性,并且没有实现Comparable接口,那么这个时候就需要创造,一个TreeSet的时候传入一个比较器

      比较器的定义方式:

               class 类名 implements Compartor{

                      

                         }

      5 如果类中实现了cpmparable 接口,又创建treeSet时传入了一个比较器,这个时候比较器为标准

             字符串的字符中第一个值进行比较,通过自然排序比较,知道无法比较,

                          这个时候就比较字符串的长度 ;

      15 泛型:    

              java  jdk 1.5新推出来的特性,好处:1将运行时的错误提前到编译时

                                                            2避免了我们无谓的强制类型的转换

           自定义方法泛型:自定义类型就是一个数据类型的占位或一个数据类型的变量,一般T和E来做                               段位符号

                      

                        格式:

                             <占位符>:定义了一个泛型

                 如果你传进去的是基本数据类型:接受的时候已改用他的包装来接收

                     

          泛型方法的注意点: 

              1泛型方法自定义一个泛型数据实在实际参数传递时被确定的;

              2泛型所用标识符需要符合标识符规范,一般大写字母 

    16 自定义数组的泛型类

                    泛型类使用注意点:

                                            1泛型类定义的自定义泛型的类型是在创建这个类对象时确定的

                                             2如果一个自定义泛型的类,在创建对象时,默认为object类型

                                             3静态方法不能够使用这个类伤自定的泛型   

                类上定义泛型:

                            格式:class 类名<声明自定义类型>{}

             泛型接口:泛型接口定义方式

                                     interface  接口名《声明自定义泛型》{

                                               }

                  接口泛型的使用注意点:

                             1.接口上自定义泛型实在接口的时候被指定的

                            2如果实现接口没有被指定接口,就会默认为object

                            3如果需要在创建接口实现类对象是指定对象,那么需要格式:

                                          class 类名《声明自定义泛型》implement 接口《声明自定义泛型》

                         

                             

  • 相关阅读:
    谈谈数据库连接池的原理
    认识wsgi
    mysql存储引擎介绍,索引
    Go语言并发组件--Goroutine
    【高级课程笔记】—— Echarts高级应用(二)
    【高级课程笔记】—— Echarts高级应用(一)
    【高级课程笔记】—— Echarts常用图表
    【高级课程笔记】—— Echarts入门&常用组件
    【重点突破】—— js防抖和节流(转)
    【重点突破】—— moment.js获取时间格式化
  • 原文地址:https://www.cnblogs.com/aa-bb/p/6108892.html
Copyright © 2020-2023  润新知