Day018 集合的集成结构图(一) Collection和一点list

拖了整整一个星期多,天哪。就是给他们做那个十周年的视频,时间就这样没了,害,十多分钟的视频硬是拿个文档和几张照片做出来,做出来还挑三拣四,搞来搞去。

 

 

 

 

 

 

 

 

 

 

 

 

数据结构

集合的集成结构图

Collection(接口)

  • 关于java.util.Collection接口中常用的方法

1.collection中能存储什么元素

没有使用“泛型”之前,collection中可以存储Object的所有子类型。

使用了“泛型”之后,collection中只能存储某个具体的类型

集合后期我们会学习“泛型”语法,目前不用管,collection中什么都能存

只要是 Object的子类型就行。(集合中不能直接存储基本数据类型,也不能存java对象,只是存储java对象的内存地址)

2.collection中的常用方法

  • boolean**[add](../../java/util/Collection.html#add(E))**(E e) 确保此 collection 包含指定的元素(可选操作)。
      向集合中添加元素

     

image-20210516151053807

size 获取集合中元素的个数

int size()
System.out.println("集合中的元素个数"+c.size());

 

c.clear

void**[clear](../../java/util/Collection.html#clear())**() 移除此 collection 中的所有元素(可选操作)。
  清空集合
c.clear();

c.contains( o )

boolean**[contains](../../java/util/Collection.html#contains(java.lang.Object))**(Object o) 如果此 collection 包含指定的元素,则返回 true
  判读当前集合中是否包含集合o

c.remove() 删除集合中某个元素

isEmpty()

boolean**[isEmpty](../../java/util/Collection.html#isEmpty())**() 如果此 collection 不包含元素,则返回 true
  判断该集合中元素的个数是否为0

toArray(使用不多)

Object[]**[toArray](../../java/util/Collection.html#toArray())**() 返回包含此 collection 中所有元素的数组。
  调用这个方法可以把集合转换成数组

iterator

Iterator<E>**[iterator](../../java/util/Collection.html#iterator())**() 返回在此 collection 的元素上进行迭代的迭代器。
   

关于集合遍历|迭代专题(重点)、

注意:一下讲解的遍历方式|迭代方式。是所有collection通用的一种方式

在Map集合中不能用,在所有的Collection以及子类中使用


第一步:获取集合对象的迭代器对象Iterator

Iterator it = c.iterator();

第二步:通过以上获取的迭代器对象开始迭代|遍历集合

boolean**[hasNext](../../java/util/Iterator.html#hasNext())**() 如果仍有元素可以迭代,则返回 true
E **[next](../../java/util/Iterator.html#next())**() 返回迭代的下一个元素。
void **[remove](../../java/util/Iterator.html#remove())**() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
while(it.hasNext()){
   Object obj = it.next();
   System.out.println(obj);
}

image-20210516192101786

 

  • Arraylist 集合 有序且可重复

  • HashSet 无序不可重复

  •  

contains

用来判断集合中是否包含某个元素的方法,调用了equals方法进行比对,equals方法返回true,就表示包含这个元素,因为调用equals,比较的内容,而不是地址。

 

重写equals方法,

将来调用的一定是调用这个重写的equals方法

image-20210516201802783

放在集合里的equals方法要重写

结论:存放在集合中的equals方法

image-20210516210807402

remove 也调用的equals方法 java认为s1和s2是一样的会删咯

 

重点

  • 集合继承结构图

  • Collection接口中常用的方法

  • 迭代器

  • Collection接口中remove方法和contains方法底层都会调用equals


 

接口是无法创建对象的

调用Object的equals方法,比较的对象的地址,所以要重写equals方法

关于集合的remove

重点:当集合的结构发生变化的时候,迭代器必须重新获取,如果还是用以前老的迭代器。会出现异常:java.util.ConcrrentModificationException

 

重点 :在迭代集合元素的过程中,不能调用集合对象的remove方法删除元素:

c.remove(o);迭代过程不能这样

会出现上面的异常

image-20210516215401013

但可以使用迭代器删除,使用迭代器删除时,会自动更新迭代器

 

重点:在迭代元素的过程中,一定要使用迭代器Iterator的remove方法删除元素。不要使用集合自带的remove方法删除元素。

 

public class CollectionTest {
   public static void main(String[] args) {
       Collection c = new ArrayList();
       c.add(1);
       c.add(2);
       c.add(3);
       //获取迭代器
       Iterator it = c.iterator();
       while (it.hasNext()){
           Object obj = it.next();
           System.out.println(obj);
      }


  }

 

list(接口)

list集合存储元素的特点:有序且可重复

有序:list集合中的元素有下标

从0开始,以1递增

可重复:存储一个1,还可以在存储1

list是Collection接口的子接口,有自己“特色”的方法

以下只列出list接口特有的常用方法:

image-20210516215945777

  • myList.add(1,"king");向指定位置上添加元素

使用不多,因为对于ArrayList集合来说效率比较低,

add 直接在末尾添加,效率较高

  • get

根据下标获取元素

因为有下标,所以list集合有自己特有的遍历方式

  • indexof

获取指定对象第一次 出现处的索引

image-20210516221031855

  • lastIndexof()

获取指定对象最后一次出现处的索引

  • remove(0);

删除下标为0的元素

  • set(2,“king”);

修改指定位置的元素

image-20210516221425779

 

posted @ 2021-05-16 22:16  各人blanknote  阅读(208)  评论(0)    收藏  举报