**集合与数组
数组中既可以放基本数据类型,也可以放引用数据类型。
集合中只能放引用数据类型,不能放基本数据类型;基本数据类型需要使用包装类来包装,然后再放入集合。
1.List集合
存储一组不唯一,有序(索引顺序)的对象。
主要有ArrayList和Linkedlist两个实现类。
2.ArrayList
在内存中分配连续的空间,实现了长度可变的动态数组。比常规的数组更加灵活,常规的数组要先定义长度,在实际应用过程中不方便。
优点:遍历元素和随机访问元素的效率比较高。
缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低。
3.LinkedList
采用双向链表存储方式。
优点:插入、删除元素效率比较高(前提必须先低效率查询,如果插入删除发生在头尾可以减少查询次数)。
缺点:遍历和访问元素效率低下。
4.ArrayList用法
1>创建一个集合对象
ArrayList list=new ArrayList();
2>添加元素(这里的元素添加都是在末尾添加元素)
list.add(1001);
list.add(1002);
list.add(998);
3>向指定的索引添加元素
public class TestArrayList {
public static void main(String[] args) {
//创建一个集合对象
ArrayList list=new ArrayList();
//添加元素(在末尾添加)
list.add(1001);
list.add(1002);
list.add(998);
//向指定的索引添加元素
list.add(3,888);
System.out.println(list);
}
}
注意:这里的索引不能超出当前 list 中的数量。
4>将list2中的所有元素添加到list1
list1.addAll(list2);
public class TestArrayList {
public static void main(String[] args) {
//创建一个集合对象
ArrayList list1=new ArrayList();
//添加元素(在末尾添加)
list1.add(1001);
list1.add(1002);
list1.add(998);
//将list2中的所有元素添加到list1
ArrayList list2=new ArrayList();
list2.add(11);
list2.add(22);
list2.add(33);
list1.addAll(list2);
System.out.println(list1);
}
}
5>查看元素的数量
System.out.println(list.size());
5>获取指定索引元素
6>根据元素找到对应的角标
public class TestArrayList {
public static void main(String[] args) {
//创建一个集合对象
ArrayList list1=new ArrayList();
//添加元素(在末尾添加)
list1.add(1001);
list1.add(1002);
list1.add(998);
list1.add("Hello");
list1.add("World");
System.out.println(list1);
//获取指定索引的元素
System.out.println(list1.get(1));
//获取元素的下标
System.out.println(list1.indexOf(1001));
运行结果:
7>删除元素
根据索引删除元素
public class TestArrayList {
public static void main(String[] args) {
//创建一个集合对象
ArrayList list1=new ArrayList();
//添加元素(在末尾添加)
list1.add(1001);
list1.add(1002);
list1.add(998);
System.out.println(list1);
list1.remove(0);
System.out.println(list1);
}
}
运行结果:
8>遍历
方法一:for循环
for (int i=0;i<list1.size();i++){
System.out.println(list1.get(i));
}
方法二:for-each循环
for(Object element1:list1){
System.out.println(element1);
}
方法三:迭代器Iterator
Iterator iterator=list1.iterator();
while (iterator.hasNext()){//是否还有数据
System.out.println(iterator.next());
}
方法四:Lambda表达式+流式编程(JDK1.8)
list1.forEach((i) -> System.out.println(i));
5.LinkedList用法与ArrayList基本一样
多了一些用法
比如addFirst()和addLast()方法
addFirst ()=add(index=0, )
addLast ()=add();
public static void main(String[] args) {
//创建一个集合对象
LinkedList list1=new LinkedList();
//添加元素(在末尾添加)
list1.add(1001);
list1.add(1002);
list1.add(998);
list1.add("Hello");
list1.add("World");
System.out.println(list1);
list1.addFirst("first");
list1.addLast("last");
System.out.println(list1);
list1.add(0,"头部");
list1.add("尾部");
System.out.println(list1);
运行结果: