集合

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 接口《声明自定义泛型》

                     

                         

原文地址:https://www.cnblogs.com/aa-bb/p/6108892.html