JavaSE-集合(List)
Collection
集合与数组的区别
- 数组只能放一种数据类型,可以是基本数据类型也可以是引用数据类型。
- 集合可以放多种数据类型,但是一般使用泛型,让他只能放置一种数据类型就是【引用数据类型】或者叫【包装类】。
- 所以集合是能放基本数据类型的,但是需要对数据进行自动装箱。
为什么要使用集合
传统使用数组对数据进行储存,但是一旦添加或者删除元素就会引起大量元素的移动后果是低效的,所以集合就是来解决这一问题的。
ArrayList 实现类
package src.com.study.oop;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo {
public static void main(String[] args) {
// 实例化实现类
Collection col = new ArrayList();
/**
* Api
* 增加:add(Object e) addAll(Collection e)
* 删除:remove(Object e) clear()
* 修改:
* 查询:iterator() size()
* 比较:equals(Collection e)比较值 ==比较地址
* 判断:isEmpty() contains(Object o)
*/
col.add("123");
Collection col2 = new ArrayList();
col2.add(123);
col2.add("1");
col2.add("abc");
col.addAll(col2);
col2.remove(123);
col2.clear();
System.out.println(col.toString());
System.out.println(col.size());
System.out.println(col2.isEmpty());
System.out.println(col.contains("1"));
/**
* 遍历集合
* 1. 增强型for循环
* 2. iterator() 迭代器
*/
for (Object o : col) {
System.out.print(o + "\t");
}
System.out.println("-------------------------");
Iterator iterator = col.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
List接口
扩展了跟索引相关的方法。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
List list = new ArrayList();
/**
* Api
* 增加:add(int index, Object e)
* 删除:remove(int index)
* 修改:set(int index, Object e)
* 查询:get(int index)
*/
list.add("123");
list.add("321");
list.add("abc");
list.add(1, "efg");
list.remove(1);
list.set(0, "hello");
System.out.println(list.toString());
System.out.println(list.size());
System.out.println(list.get(0));
/**
* 对List 集合的遍历
* 1. for 循环(增强型或者普通)
* 2. iterator() 迭代器
*/
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + "\t");
}
for (Object o :
list) {
System.out.print(o + "\t");
}
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
ArrayList 实现类
ArrayList 底层就是一个数组,那些方法其实就是对数组的增删改查操作。
import java.util.ArrayList;
public class Demo2 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList(); // 底层创建数组,且为{}长度为0
arrayList.add("123");// 执行这一步底层生成长度为10 的数组,并且装入数据,size++
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");// 执行到这一步直接放满长度为10 的数组,在此之前的元素添加均未调用grow方法
arrayList.add("123");// 执行到这一步底层数组不够用时,将老数组扩容1.5 倍。原因:(源码)int newCapacity = 10 + (10 >> 1);结果就是int newCapacity = 15;elementData = Arrays.copyOf(elementData, 15); 并且对老数组进行了拷贝。
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add("123");
arrayList.add(&