JavaSE小笔记--15(java中的集合)

一.回顾一下以前讲的数组

自定义类型数组,数组中存储引用类型的内存图



二.集合框架

(一)第一部分

        集合的由来

数组长度是回定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少

数组和集合的区别

区别1:

数组既可以存储基本数据类型,又可以存储引用数据类型

集合只能存储引用数据类型(对象),存储基本数据类型会自动装箱变成对象

区别2


数组长度是固定的,不能自动增长

集合的长度的是可变的,可以根据元素的增加而增长

数组和集合什么时候用

1,如果元素个数是确定的推荐用数组

2,如果元素个数不是固定的推荐用集合

集合继承体系图(暂时只说一下单列集合)


(二)第二部分

(1)Collection集合的基本功能

它是一个接口,不能直接实例化对象;属于util包下的,使用需要导包,这里暂时不讲泛型,后面介绍,这里暂时都把泛型理解成Object类就好了

主要学习的方法有:

boolean add(E e)---向集合中添加元素---add方法如果是List集合一直都返回true,因为List集合中是可以存储重复元素的;如果是Set集合,当存储重复元素是,返回false

boolean remove(Object o)---从集合中删除指定元素

void clear ()---清空集合

boolean contains(object o)---判断集合中是否包含指定元素

boolean isEmpty()---判断集合是否为空

int size()---获取集合中元素的个数

Object [] toArray()---将集合转换成Object类型的数组

带All的方法:

boolean addAll(Collection c)---将集合中的每一个元素添加到调用该方法的集合对象中

boolean removeAll(Collection c)---删除的是交集

boolean containsAll(Collection c)---判断调用的集合是否包含传入的集合

boolean retainAll(Collection c)---取交集,如果调用的集合改变就返回true;如果不变就返回false

迭代器

概述:集合是用来存储元素的,存储的元素需要查看,那么就需要迭代(遍历)

迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。

在 Java 中 Iterator 为一个接口,它只提供了迭代了基本规则,在 JDK 中他是这样定义的:对 collection 进行迭代的迭代器。

其接口定义如下:

    public interface Iterator {

       boolean hasNext();

       Object next();

       void remove();

    }

Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型

boolean hasNext():判断容器内是否还有可供访问的元素

void remove():删除迭代器刚越过的元素

对于我们而言,我们只一般只需使用 next()、hasNext() 两个方法即可完成迭代。

Iterator it = list.iterator();

while(it.hasNext()){

        System.out.println(it.next());

}

for(Iterator it = liat.iterator(); it.hasNext(); ) {

     Object o = it.next();

      //do something

}

(2)List集合---Collection的子接口

特有的功能:

void  add (int  index,E element)---在指定索引处添加元素,index<=size并且index>=0都不会报异常

E  remove(int index)---通过索引删除,将被删除的元素返回,并且次方法删除不会自动装箱    

E  get(int index)---通过索引取获取元素

E  set(int  index,E element)---将指定位置的元素修改

(3)vector的特有功能(被边缘化的东东,很少用)

Vector类特有功能

public void addElement(E obj)---添加元素

public E elementAt(int index)

public Enumeration elements()--获取枚举

案例演示

Vector的送代

Vector v= new Vector();        //创建集合对象,L⊥st的子类

v.addElement ("a");

v.addElement("b");

v.addElement ("c");

v.addElement("d");

/ /Vector迭代

Enumeration en=V.elements();     //获取枚举

while(en. hasMoreElements()){     //判断集合中是否有元素

system.out. println(en. nextElement());        //获取集合中的元素

}

(4)List的三个子类的特点

Arraylist:


底层数据结构是数组,查询快,增删慢

线程不安全,效率高


Vector
底层数据结构是数组,查询快,增删慢

线程安全,效率低


Vector相对ArrayList    查询慢(线程安全的)

Vector相对Linkedlist    增删慢(数组结构)


LinkedList:


底层数据结构是链表,查询慢,增删快

线程不安全,效率高


Vector和 ArrayList的区别


Vector是线程安全的,效率低

ArrayList是线程不安全的,效率高


共同点:都是数组实现的


        ArrayList和LinkedList的区别

ArrayList底层是数组结果,查询和修改快

LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢


List有三个儿子,我们到底使用谁呢?


查询多用 ArrayList
增删多用 Linkedlist
如果都多 ArrayList



猜你喜欢

转载自blog.csdn.net/xiaodunlp/article/details/80542293