数组和集合的区别
1.数组的长度是固定的;数组元素类型可以是基本类型,也可以是引用类型
2.集合的长度是可变的;集合元素类型只能是引用数据类型。
集合中如要想存储基本数据类型,需要转换为包装类
int-->Integer
集合的体系结构
Colletion接口:集合体系的根接口
-- List接口: 有索引、新增了一些对索引进行操作的方法
ArrayList类
LinkedList类
-- Set接口: 没有索引
HashSet类
TreeSet类
Collection接口
public boolean add(E e)
将指定的元素集合的结尾
public void clear()
清空集合中的元素
public boolean contains(Object o)
如果这个列表包含指定元素,返回true
public boolean isEmpty()
如果集合不包含任何元素,则返回true
public boolean remove(Object o)
从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。
default boolean removeIf(Predicate<? super E> filter)
删除满足给定条件的这个集合的所有元素。
条件:通过Lambda表达式来提供
public int size()
返回此集合中的元素的数目
public Iterator iterator()
获取集合的迭代器(是一种通用的遍历方式)
例://Collection是一个接口,不能直接创建的对象。但是可以创建它的实现类对象,也可以调用接口的方法。
Collection<String> coll=new ArrayList<>();
//添加元素
coll.add("helloJava");
coll.add("world");
coll.add("helloWorld");
coll.add("java");
//删除集合中以"hello"开头的元素
coll.removeIf(s->s.startsWith("hello")); //这里的s表示集合中的元素
System.out.println(coll);
迭代器遍历
Collection<String> coll=new ArrayList<>();
//添加元素
coll.add("土豆1");
coll.add("土豆2");
coll.add("土豆3");
//获取迭代器对象 (筷子)
Iterator<String> it = coll.iterator();
//判断是否有下一个元素
while (it.hasNext()){
//获取元素
String e = it.next();
System.out.println(e);
}
//如果上面的循环结束了,表示元素已经遍历完了。继续获取元素会报错 NoSuchElementException
System.out.println(it.next());
使用迭代器时的注意事项:
注意问题:
当使用迭代器进行遍历集合的时候,集合自己不能去操作集合中的元素。
Java不允许迭代器和集合自己并发的修改集合
否则java.util.ConcurrentModificationException(并发修改异常)
解决方案:
使用迭代器自己的删除方法 it.remove()
增强for遍历
增强for其实就是为了简化迭代器的代码书写,原理和迭代器一模一样。
for(元素类型 变量名 : 集合/数组){
//变量名就表示所有的元素
}
快捷键:数组名.for
遍历集合:
Collection<String> coll=new ArrayList<>();
//添加元素
coll.add("土豆1");
coll.add("土豆2");
coll.add("土豆3");
//增强for
for(String s : coll){
System.out.println(s);
}
遍历数组:
int[] array={1,2,3,4,5};
for(int s:array){
System.out.println(s);
}
List集合特有方法
//相对于Collection来说,List集合多了一些针对索引操作的方法
public void add(int index, E e)
在指定的索引位置添加元素
public E remove(int index)
根据索引删除元素,返回被删除的元素
public E get(int index)
根据索引获取元素
public E set(int index, E e)
修改指定索引的的元素
数据结构:数据的组织方式就叫做数据结构,不同的组织方式就形式不同的数据结构,每一种数据结构的特点不一样。
栈结构:先进后出 (子弹夹)
队列结构:先进先出 (排队、安检机)
数组:查询快,增删慢
链表:查询慢,增删快(每一个元素记录下一个元素的地址)
LinkedList类特有方法
由于 LinkedList底层是链表,新增了一些针对头和尾进行操作的方法。
public void addFirst(E e)
添加元素到集合开头
public void addLast(E e)
添加元素到集合末尾
public E removeFirst()
移除开头的元素
public E removeLast()
移除结尾的元素
public E getFirst()
获取开头的元素
public E getLast()
获取结尾的元素