JAVA 集合类 ArrayList详细介绍 Collection ,增强for 循环和LinkedList

集合类的特点 :提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

集合和数组的区别:

共同点: 都是存储数据的容器

不同点:数组的容量是固定的,集合的容量是可变的

集合类

集合体系结构 

Collection 常用方法:

boolean add(E e)

添加元素

boolean remove(Object o)

从集合中移除指定的元素

boolean removeif(Object o)

根据条件进行删除

void clear()

清空集合

boolean contains(Object o)

判断集合中是否存在指定的元素

boolean isEmpty()

判断集合是否为空

其中removeif根据条件删除元素

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("aaaa");
arrayList.removeIf((String s)->{return(s.length()==3);});
System.out.println(arrayList);

也就是自动调用遍历集合得到集合中的每一个元素,lambda 参数为集合元素的类型

把每一个元素到Lambda表达式中判断一下,如果返回的是true就删除

用Iterator 迭代器遍历集合  :

terator:迭代器,集合的专用遍历方式 Iterator<E> iterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引。

Iterator中的常用方法

boolean hasNext():判断当前位置是否有元素可以被取出

E next():获取当前位置的元素     将迭代器对象移向下一个索引位置

直接先上代码

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("aaaa");
Iterator<String> it=arrayList.iterator();  //创建迭代器对象
while (it.hasNext()){
    String element = it.next();
    System.out.println(element);
}
hasNext() :判断迭代器当前指向索引是否有元素

next():取出当前迭代器指向索引的元素,然后指向后面一个元素

当当前索引有元素,就用next()取出并指向下一个 

这样就可以遍历了

迭代器删除元素

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("aaa");
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("aaaa");
Iterator<String> it=arrayList.iterator();
while (it.hasNext()){
    String s= it.next();
    if(s.equals("aaa")){
        it.remove();//指向谁符合 就删除谁 
    }
}
System.out.println(arrayList);

增强for循环 

增强for:简化数组和Collection集合的遍历 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

实现Iterable接口的类(双链集合类不算)才可以使用迭代器和增强for

增强for格式:
for (String s : arrayList) {
    System.out.println(s);
}

此处参数为第三方参数,只用作遍历  没法修改原来的集合

三种集合遍历方式使用场景

如果需要操作索引,使用普通for循环

如果在遍历的过程中需要删除元素,请使用迭代器

如果仅仅想遍历,那么使用增强for

List 集合概述和特点

有序(存储和取出元素的顺序一致),有索引(可操作元素),可重复

List本身也是接口,实现类还是得用ArrayList;

void add(int index,E element)

在此集合中的指定位置插入指定的元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

E get(int index)

返回指定索引处的元素

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

构造方法

ArrayList() 构造一个初始容量为10 的空列表  (可以扩容)

自动扩容的底层就是数组长度不够时,会新建一个1.5倍长的数组,并且将所有元素复制过去

第一次添加元素:

集合容器如果没有加入<>,就可以存储任意数据类型

<>:对集合容器存储的数据类型进行限制 且尖括号内只能放引用数据类型

如果要放基础数据类型,那么尖括号内可以放该类型的包装类

ArrayList<String> list = new ArrayList();  //只允许添加字符串类型的数据  

list.add("abc"); // 调用add方法向容器中添加数据

sout(list);//输出的是数组

成员方法

.add(); 单个参数就是向容器中末尾添加数据

.add(int index,String element) ; 可以在置顶索引处插入数据 //但是不能访问不存在的索引

.remove(object o);删除指定的元素,返回删除是否成功  //但是如果有同名的,只会删除一个

.remove(int index);删除指定索引处的元素,返回被删除的元素 //一般不接收返回的元素 

.set(int index,E element) ;修改指定索引处的元素,返回被修改的元素

.get(int index); 返回指定索引处的元素

.size() 返回集合中元素的个数

遍历集合

ArrayList<String> list = new ArrayList<>();
list.add("李白");
list.add("李黑");
list.add("李蓝");
for (int i = 0; i < list.size(); i++) {
    String s = list.get(i);
    System.out.println(s);
}

集合删除元素 *

//集合删除元素
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("张三");
list.add("李四");
list.add("test");
list.add("王五");

for (int i = 0; i < list.size(); i++) {
    if("test".equals(list.get(i))){ //当字符串中常量跟变量作比较时,最好用常量调用方法,避免出现错误
    list.remove(i); //通过元素的索引删除元素
    i--;  //至关重要的i-- ,因为当删除一个元素后,后面的元素都会往前靠一位,所以需要i也往前一位
    }else{
        System.out.println(list.get(i));
    }
}

集合筛选元素

public static void main(String[] args) throws ParseException {
     //新建并初始化初始集合
    ArrayList<Student> list = new ArrayList<>();
   Student stu1 = new Student("张三",15);
   Student stu2 = new Student("王五",15);
   Student stu3 = new Student("李白",40);
   list.add(stu1);
   list.add(stu2);
   list.add(stu3);
   //用生成新集合的方法创建新的集合
   ArrayList<Student> list2 =getList(list);
   //遍历输出最终集合的元素
    for (int i = 0; i < list2.size(); i++) {
        System.out.println(list2.get(i).getsName()+","+list2.get(i).getsAge());
    }

}
public static ArrayList<Student> getList(ArrayList<Student> list) {
    ArrayList<Student> newList = new ArrayList<>(); //新建学生集合
    //循环找到复合条件的元素并添加到新的集合
    for (int i = 0; i < list.size(); i++) {
        if(list.get(i).getsAge()<18){
            newList.add(list.get(i));
        }
    }
    return newList; //将集合返回
}

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

LinkedList 特有方法

public void addFirst​(E e)

在该列表开头插入指定的元素

public void addLast​(E e)

将指定的元素追加到此列表的末尾

public E getFirst​()

返回此列表中的第一个元素

public E getLast​()

返回此列表中的最后一个元素

public E removeFirst​()

从此列表中删除并返回第一个元素

public E removeLast​()

从此列表中删除并返回最后一个元素

泛型 

泛型是JDK 5中引入的特性,它提供了编译时安全监测机制

好处:

1.把运行时期的问题提到了编译期间

2.避免了强制类型转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值