集合也相当于一个数组,用来存储多个数据
1.集合的基本概念和讲解
(1)特点:
1.引用数据类型
2.定长的,长度一旦确定不可改变
3.存储相同数据类型的数据
4.有序,根据索引操作数组中的数据
(2)使用需求
1.容量跟随内容的多少进行动态的增删
2.存储任意引用类型数据
例题:手动简单封装容器类型:数组
public class Class001_App {
public static void main(String[] args) {
//容器类型
ArrayList list = new ArrayList();
list.add("zhangsan");
list.add(123);
System.out.println(list.size());
System.out.println(list.get(0));
System.out.println(list.get(1));
MyContainer my = new MyContainer();
my.add("abc");
my.add("efg");
System.out.println(my.size());
my.add("efg");
System.out.println(my.size());
System.out.println(my.get(0));
System.out.println(my.get(1));
System.out.println(my.get(2));
}
}
//封装自定义容器类型 : 只能存储字符串类型的数据
class MyContainer{
//存储数据的结构
private String[] elementData;
//存储数据的个数
private int size;
public MyContainer() {
}
//添加方法
public void add(String value) {
//判断是否为第一次添加数据
if(elementData==null && size==0){
//创建新数组
elementData = new String[1];
//直接把value放入数组
elementData[0] = value;
//长度+1
size++;
return;
}
//备份原数组: 用来做数组数据拷贝
String[] temp = elementData;
//创建新数组
elementData = new String[size+1];
//1)数组数据的拷贝 i作为新数组与原数组索引
for(int i=0;i<size;i++){
elementData[i] = temp[i];
}
//2)添加新数据
elementData[size++] = value;
//长度+1
}
//size
public int size(){
return this.size;
}
/**
* 根据索引获取数据
* @param index 索引
* @return index索引位置的数据
*/
public String get(int index) {
if(index<0 || index>=size){
throw new IndexOutOfBoundsException("索引越界啦!!!");
}
return elementData[index];
}
//根据索引删除
//修改制定索引位置的数据
}
2.集合的遍历
运用foreach遍历
iterator迭代器
public class Class002_Each {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add("aaa");
col.add("bbb");
col.add("ccc");
col.add("ddd");
//1.增强for
for(Object s:col){
System.out.println(s);
}
//2.迭代器
//1)获取迭代器对象
Iterator it = col.iterator();
//2)判断是否存在下一个数据
while(it.hasNext()){
//3)获取下一个数据
System.out.println(it.next());
}
}
}
3.集合的根接口Collection
集合层次结构中的根接口。 集合表示一组对象,称为其元素 。
1)常用方法的使用
public class Class001_Collection {
public static void main(String[] args) {
//集合
Collection col = new ArrayList();
Collection col2 = new ArrayList();
//常用方法
//boolean add(E e) 确保此集合包含指定的元素(可选操作)。
//boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合中(可选操作)。
col.add("abc");
col.add(false);
col.add(100);
col2.add("aaa");
col2.add("bbb");
System.out.println(col);
col.addAll(col2);
System.out.println(col);
//boolean contains(Object o) 如果此collection包含指定的元素,则返回 true 。
//boolean containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回 true 。
System.out.println(col.contains(100));
col2.add("ccc");
System.out.println(col.containsAll(col2));
//boolean remove(Object o) 从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
//boolean removeAll(Collection<?> c) 删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。
System.out.println(col.remove(100));
System.out.println(col);
//System.out.println(col.removeAll(col2));
//System.out.println(col);
//boolean retainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
System.out.println(col.retainAll(col2));
System.out.println(col);
System.out.println(col2);
//Object[] toArray() 返回包含此集合中所有元素的数组。
System.out.println(Arrays.toString(col.toArray()));
}
}