Java基础学习摘要之Collection集合和List集合、泛型与遍历

集合

数组和集合的区别:
        (1): 长度区别:
            数组的长度是固定的而集合的长度是可变的
        (2): 存储数据类型的区别:
            数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能
        存储引用数据类型
        (3): 内容区别:
            数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素

Collection的功能概述:

    public boolean add(E e) 添加一个元素
    public boolean addAll(Collection c) 添加一个集合的元素
    public void clear()     清除所有的元素
    public boolean remove(Object o)         删除一个元素
    public boolean removeAll(Collection c)  删除一个集合的元素
    public boolean contains(Object o)   判断是否包含指定元素
    public boolean containsAll(Collection c) 判断是否包含指定的集合元素
    public boolean isEmpty()    判断是否为空
    public Iterator<E> iterator()       获取一个值
    public boolean retainAll(Collection<?> c)   取交集
    public int size()   元素的个数
    public Object[] toArray()   把集合转换为数组

List

List:元素有序且可以重复

List的功能概述:

    public void add(int index, Object element)  在指定位置添加一个元素
    public Object remove(int index)     移除指定索引处的元素
    public Object set(int index, Object element)        用指定元素替换指定位置处的元素
    public Object get(int index) 返回列表中指定位置的元素
    public ListIterator listIterator() 列表迭代器(List集合特有的迭代器)

分类:ArrayList Vector LinkedList

特点:

    ArrayList:底层数据结构是数组,查询快,增删慢。
               线程不安全,效率高。

    Vector:底层数据结构是数组,查询快,增删慢。
            线程安全,效率低。

    LinkedList:底层数据结构是链表,查询慢,增删快。
                线程不安全,效率高。

Vector

    public void addElement(E obj)   在集合末尾添加指定元素
    public E elementAt(int index)   返回指定元素处的索引值
    public boolean removeElement(Object obj)    删除索引值最小的元素
    public void removeElementAt(int index)  删除指定位置的元素
    public void setElementAt(E obj, int index)      将指定位置处的元素设置为指定对象
    public Enumeration<E> elements()    返回枚举

Enumeration

    public boolean hasMoreElements()    测试此枚举中是否包含更多的元素
    public Object nextElement()  如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素

LinkedList

    public void addFirst(E e)   在第一个索引处添加一个元素
    public void addLast(E e)    在末尾添加一个元素
    public E getFirst()     获取开头的元素
    public E getLast()      获取末尾的元素
    public E removeFirst()  删除开头的元素
    public E removeLast()   删除末尾的元素

泛型:

List<? extends T>和List<? super T>之间有的区别:
    前者为向下限定,T及其子类
    后者为向上限定,T及其父类

遍历

public class Test3 {
public static void main(String[] args) {
    LinkedList<Student> list= new LinkedList();
    Student s1=new Student("张三", 23, '男', 88);
    Student s2=new Student("李四", 24, '女', 90);
    Student s3=new Student("王五", 21, '男', 85);

    list.add(s1);
    list.add(s1);
    list.add(s1);
    }
}

迭代器遍历:

    Iterator it=list.iterator();
    while (it.hasNext() ) {
        System.out.println(it.next());
    }

列表迭代器遍历:

    ListIterator li=list.listIterator();
    while (li.hasNext()) {
        System.out.println(li.next());
    }

size()和get()方法遍历:

     for (int i=0;i<list.size();i++){
        System.out.println(list.get(i));
    }

增强for遍历:

    for (Student lin:list){
        System.out.println(lin);
    }

并发修改异常:ConcurrentModificationException

原因:我们的迭代依赖于集合 我们在集合中添加好了元素之后获取迭代器,迭代器就会知道集合的元素个数;这时在遍历时又突然想给集合里面加一个元素(使用集合的add方法),迭代器不同意,就报错了
解决方案:1) A:迭代器迭代元素,迭代器修改元素
            B:集合遍历元素,集合修改元素
         2)使用for循环遍历、添加元素

数据结构分类:栈 , 队列 , 数组 , 链表 , 树 , 哈希表

猜你喜欢

转载自blog.csdn.net/Eternity_y/article/details/81386328