容器
/*
数组 : 存储多个数据
引用数据类型,对象数据
长度一旦确定不可改变,定长的
存储的多个数据要求数据类型相同
索引,有序的
集合|容器 : 存储多个数据
可以根据数据的增删动态改变长度
可以存储不同类型的数据
要求集合只能存储引用数据类型的数据 */
public static void main(String[] args) {
//1.创建一个ArrayList对象
ArrayList list = new ArrayList();
//2.操作使用集合
list.add("zhangsan");
list.add(123);
list.add(false);
list.add(null);
list.add(new String("abc"));
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
System.out.println(list.get(4));
System.out.println(list.size());
System.out.println(list);
}
/*
自定义容器类型(模仿ArrayList)
要求 : 只能存储字符串数据
*/
public class Class002_MyContainer {
public static void main(String[] args) {
MyContainer my = new MyContainer();
System.out.println(my.size());
my.add("aaa");
System.out.println(my.size());
my.add("bbb");
System.out.println(my.size());
my.add("ccc");
System.out.println(my.size());
System.out.println(my.get(0));
System.out.println(my.get(1));
System.out.println(my.get(2));
System.out.println(my);
}
}
//容器类型
class MyContainer{
//底层存储数据的结构
private String[] elementData = null;
//记录集合中数据的个数
private int size;
public MyContainer() {
}
/**
* 追加方法
* @param value 要添加的数据
*/
public void add(String value) {
//如果是第一次添加
if(elementData==null && size==0){
//1)创建新数组长度1
elementData = new String[1];
//2)然后把数据添加到数组中
elementData[0] = value;
//3)size++
size++;
return;
}
//如果不是第一次添加
//记录原数组的地址
String[] temp = elementData;
//1)创建新数组,长度为原数组长度+1
elementData = new String[size+1];
//2)拷贝数据
for(int i=0;i<size;i++){
elementData[i] = temp[i];
}
//3)这一次添加的数据放在数组的最后
elementData[size] = value;
//4)size++
size++;
}
/**
* 返回集合中数据的个数
* @return size属性值
*/
public int size(){
return this.size;
}
/**
* 根据索引获取集合中的数据
* @param index 索引
* @return 参数索引位置的数据
*/
public String get(int index) {
if(index<0 || index>=size){
throw new IndexOutOfBoundsException(index+"索引越界啦~~~~~");
}
return elementData[index];
}
@Override
public String toString() {
return Arrays.toString(elementData);
}
}
/*
Collection :
集合层次结构中的根接口。 集合表示一组对象,称为其元素 。
List子接口下的实现类有序可重复,Set子接口下的实现类无序不可重. 遍历方式 :
1.foreach
2.iterator迭代器
*/
Collection col1 = new ArrayList();
Collection col2 = new ArrayList();
//boolean add(E e) 确保此集合包含指定的元素(可选操作)。
col1.add(true);
col1.add("aaa");
col1.add('a');
col1.add(1.2);
System.out.println(col1);
col2.add(111);
col2.add(222);
col2.add(333);
System.out.println(col2);
//boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合中(可选操作)。
col1.addAll(col2);
System.out.println(col1);
System.out.println(col2);
//void clear() 从此集合中删除所有元素(可选操作)。
//boolean isEmpty() 如果此集合不包含任何元素,则返回 true 。
//boolean contains(Object o) 如果此collection包含指定的元素,则返回 true 。
System.out.println(col1.contains("aaa"));
//boolean containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素,则返回 true 。
System.out.println(col1.containsAll(col2));
//boolean remove(Object o) 从此集合中移除指定元素的单个实例(如果存在)(可选操作)。
System.out.println(col1.remove(111));
System.out.println(col1);
//boolean retainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
//System.out.println(col1.retainAll(col2));
System.out.println(col1);
//int size() 返回此集合中的元素数。
//Object[] toArray() 返回包含此集合中所有元素的数组。
Object[] arr= col2.toArray();
System.out.println(arr);
//foreach
for(Object obj:col1){
System.out.println(obj);
}
//iterator迭代器
//1)获取迭代器对象
Iterator it = col1.iterator();
//2)判断是否存在下一个元素
while(it.hasNext()){
//3)获取下一个元素
System.out.println(it.next());
}
/*
List :
有序的可重复 新增方法 :
新增了一些根据索引进行操作的方法 遍历方式 :
普通for
增强for
iterator迭代器
*/
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("aaa");
System.out.println(list);
//void add(int index, E element) 将指定元素插入此列表中的指定位置(可选操作)。
list.add(3,"ddd");
System.out.println(list);
//boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到指定位置的此列表中(可选操作)。
//E get(int index) 返回此列表中指定位置的元素。
System.out.println(list.get(1));
//int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
System.out.println(list.indexOf("aaa"));
//int lastIndexOf(Object o) 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。
System.out.println(list.lastIndexOf("aaa"));
//static <E> List<E> of(E... elements) 返回包含任意数量元素的不可修改列表。
List list2 = List.of(1,2,3,4,5);
System.out.println(list2);
//list2.add(6); //java.lang.UnsupportedOperationException
System.out.println(list2);
//E remove(int index) 删除此列表中指定位置的元素(可选操作)。
System.out.println(list.remove("ddd"));
System.out.println(list.remove(2));
System.out.println(list);
//boolean remove(Object o) 从该列表中删除指定元素的第一个匹配项(如果存在)(可选操作)。
//E set(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
System.out.println(list.set(1,"bbbb"));
System.out.println(list);
//List<E> subList(int fromIndex, int toIndex) 返回指定的 fromIndex (包含)和 toIndex (不包括)之间的此列表部分的视图。
System.out.println(list.subList(0,2));
//for
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}