集合的理解和好处
1.可以动态保存任意多个对象,使用方便
2.提供了add,remove,set,get,增删改查方法,使代码更加简洁
集合框架图
单列集合
实现表示继承,虚线表示实现接口
Collection有两个重要接口List和Set,他们的实现子类都是单列集合
双列集合
Map的实现子类都是双列集合,键值对的形式K-V
Collection常用方法
1.添加方法add
List list = new ArrayList();
//1.添加方法add(Object),这里的类型是Object
list.add("jack");
list.add(12);//这里用了自动装箱add(new Integer(12))
list.add(true);
list.add("tom");
list.add("join");
System.out.println("list: " + list);
2..删除方法remove
//2.删除方法remove,这个方法是重载的,可以选择两种方式删除,第一种是删除指定索引,第二种是删除指定元素(返回的是boolean)
list.remove(0);
System.out.println("list: " + list);
list.remove(new Integer(12));
System.out.println("list: " + list);
3.检查元素是否存在contains
//3.检查元素是否存在,contains,返回值是boolean
System.out.println(list.contains(true));
4.返回元素个数size
//4.返回元素个数,size()
System.out.println(list.size());
5.判断元素是否为空
//5.判断元素是否为空isEmpty()
System.out.println(list.isEmpty());
6.清空clear
//6.clear()清空
list.clear();
System.out.println("list: " + list);
7.添加多个元素addAll,添加类型为Connection
//7.添加多个元素addall,添加的类型为Connection
List list2 = new ArrayList();
list2.add("三国演义");
list2.add("红楼梦");
List list3 = new ArrayList();
list3.add("三国");
list3.add("红楼");
list.addAll(list2);
list.addAll(list3);
System.out.println(list);
8.判断多个元素是否存在containsAll
//8.判断多个元素是否存在containsAll
System.out.println(list.containsAll(list2));
System.out.println(list.containsAll(list3));
9.删除多个元素removeAll
//9.删除多个元素
System.out.println(list.removeAll(list2));
System.out.println("list: "+ list);
Iterator迭代器
但凡是能实现Collection的接口都能使用Iterator迭代器进行集合元素的遍历
iterator迭代器,可以将集合中的元素遍历出来,所有实现Collection接口的子类都可以使用iterator迭代器
hasNext()是判断是否还有下一个元素
next()是取出迭代器元素
如果在使用iterator.next()会导致异常NoSuchElementException,因为当前指针已经指向最后一个元素了
iterator.next();
如果想重置迭代器:iterator = col.iterator();直接执行最初就好
package com.tbw.Collection_;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* ClassName:Iterator_
* Datetime:2025/1/20 23:08
* jdk:11
*/
public class Iterator_ {
@SuppressWarnings({"all"})
public static void main(String[] args) {
Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中",10.1));
col.add(new Book("红楼梦","曹雪芹",34.6));
col.add(new Book("小李飞刀","古龙",5.1));
//iterator迭代器,可以将集合中的元素遍历出来,所有实现Collection接口的子类都可以使用iterator迭代器
//hasNext()是判断是否还有下一个元素
//next()是取出迭代器元素
Iterator iterator = col.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println("col="+ obj);
}
//如果在使用iterator.next()会导致异常NoSuchElementException,因为当前指针已经指向最后一个元素了
//iterator.next();
//如果想重置迭代器
System.out.println("====================");
iterator = col.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println("col="+ obj);
}
}
}
class Book{
private String name;
private String autor;
private double price;
public Book(String name, String autor, double price) {
this.name = name;
this.autor = autor;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", autor='" + autor + '\'' +
", price=" + price +
'}';
}
}
集合增强for
增强for:可以理解成就是简化版的迭代器,因为底层代码就是迭代器,因为迭代器写起来很麻烦
增强for快捷键:大写的I
package com.tbw.Collection_;
import java.util.ArrayList;
import java.util.Collection;
/**
* ClassName:for_
* Datetime:2025/1/21 12:42
* jdk:11
*/
public class for_ {
@SuppressWarnings({"all"})
public static void main(String[] args) {
Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中",10.1));
col.add(new Book("红楼梦","曹雪芹",34.6));
col.add(new Book("小李飞刀","古龙",5.1));
for (Object obj :col) {
System.out.println(obj);
}
}
}
普通for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
List接口
List接口是Collection的子接口
List中API实现类有:
ABstractList ABstractSequentiaList ArrayList AttributeList
CopyOnWriteArrayList LinkedList RoleList RoleUnresolvedList
Stack Vector
有序性
1.凡事实现List接口的子接口都有一个特点:集合的顺序是有序地,即存入顺序和取出顺序相对应
可根据下标索引取元素
2.List集合中的元素可以根据下标索引取出即 list.get(2)
package org.example;
import java.util.ArrayList;
import java.util.List;
public class List_ {
public static void main(String[] args) {
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
list.add("hello2");
System.out.println("list="+list);
System.out.println(list.get(2));
}
}
List接口常用方法(注意,set不可用,他们的共用方法只有Collection的)
1.add(int index,Object ele)
在元素中间插入元素
package org.example;
import java.util.ArrayList;
import java.util.List;
public class List_ {
public static void main(String[] args) {
List list = new ArrayList();
list.add("小红");
list.add("小蓝");
list.add(1,"小紫");
System.out.println("list="+list);
}
}
2.addAll(int index,Collection ele)
在元素中间插入集合
//在元素中间插入集合
List list = new ArrayList();
list.add("小花");
list.add("小兰");
list.addAll(1,list);
System.out.println("list="+list);
3.get(int index)
获取指定位置索引元素
//get(int index) 获取指定位置索引元素
System.out.println(list2.get(1));
4.indexof(obj)
返回obj在集合中第一次出现的位置,如果后面有相同元素,不用管
//indexof返回元素在集合中第一次出现的位置
System.out.println(list.indexOf("小花"));
5.lastindexOf(obj)
返回元素最后一次出现的位置
//lastindexOf返回元素在集合中最后一次出现的位置
System.out.println(list.lastIndexOf("小红"));
6.remove(int index)
移除指定下标元素,并返回
//remove移除指定下标元素并返回
System.out.println("list="+list);
list.remove(0);
System.out.println("list="+list);
7.set(int index,object ele)
替换指定下标的元素
//set替换制定下标的元素
System.out.println("=====================");
System.out.println("list="+list);
list.set(1,"marry");
System.out.println("list="+list);
8.subList(int fromIndex,int toIndex)
返回从fromIndex到toIndex位置的子集合
//subList,返回从fromIndex到toIndex的自己和
list.add("jack");
list.add("xiaoming");
System.out.println("list="+list);
List returnlist = list.subList(0, 3);
System.out.println("returnList="+returnlist);
返回的是0 1 2元素 不包括3 前闭后开
fromIndex<=subList<toIndex