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 包含指定的元素(可选操作)。向集合中添加元素

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);
}

-
Arraylist 集合 有序且可重复
-
HashSet 无序不可重复
-
contains
用来判断集合中是否包含某个元素的方法,调用了equals方法进行比对,equals方法返回true,就表示包含这个元素,因为调用equals,比较的内容,而不是地址。
重写equals方法,
将来调用的一定是调用这个重写的equals方法

放在集合里的equals方法要重写
结论:存放在集合中的equals方法

remove 也调用的equals方法 java认为s1和s2是一样的会删咯
重点
-
集合继承结构图
-
Collection接口中常用的方法
-
迭代器
-
Collection接口中remove方法和contains方法底层都会调用equals
接口是无法创建对象的
调用Object的equals方法,比较的对象的地址,所以要重写equals方法
关于集合的remove
重点:当集合的结构发生变化的时候,迭代器必须重新获取,如果还是用以前老的迭代器。会出现异常:java.util.ConcrrentModificationException
重点 :在迭代集合元素的过程中,不能调用集合对象的remove方法删除元素:
c.remove(o);迭代过程不能这样
会出现上面的异常

但可以使用迭代器删除,使用迭代器删除时,会自动更新迭代器
重点:在迭代元素的过程中,一定要使用迭代器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接口特有的常用方法:

-
myList.add(1,"king");向指定位置上添加元素
使用不多,因为对于ArrayList集合来说效率比较低,
add 直接在末尾添加,效率较高
-
get
根据下标获取元素
因为有下标,所以list集合有自己特有的遍历方式
-
indexof
获取指定对象第一次 出现处的索引

-
lastIndexof()
获取指定对象最后一次出现处的索引
-
remove(0);
删除下标为0的元素
-
set(2,“king”);
修改指定位置的元素

浙公网安备 33010602011771号