数组的缺陷:定长,想要改变异常繁琐——进而演化手撕可变长度的容器。
一数组
public class MyArray {
private Object [] arr; //声明一个Object类型的数组
private int size;//表示数组的下标 因为他们是类成员变量 在创建对象时都有默认值。
public MyArray(){ //无参构造函数
this(3); //本类中其他的构造函数 this本类的对象。 如果在构造方法中this()表示调用本类的其他构造函数
}
public MyArray(int initSize){ //有参构造函数--表示数组的长度
if(initSize<0){ //长度不合法
throw new RuntimeException("sorry 数组的长度有误。");
}
arr=new Object[initSize];
}
//把元素o放入数组arr
public void addData(Object o){
//判断你的数组是否已满
if(size>=arr.length){
//扩容--(1)容器的长度变长 (2)把原来容器中的元素复制到新的容器中
Object[] newArr = Arrays.copyOf(arr, size * 2);
arr=newArr;
}
arr[size]=o;
size++;
}
//根据下标获取数组中的元素。
public Object getData(int index){
if(index>=size){
throw new ArrayIndexOutOfBoundsException("下标越界");
}
Object o = arr[index];
return o;
}
}
java官网 基于数组 根据不同的数据结构 创建了多个类 而这些类统称 为集合框架。
二 ArrayList
List list = new ArrayList(); //创建一个集合对象 如果没有指定集合容器的长度默认为10
List list1 = new ArrayList(15); //长度15的集合
//添加 (1)可以添加任意类型
list.add("java01");
list.add("java02");
list.add(15.5);
list.add(18);
list.add(true);
list.add(new Date());
System.out.println(list);
list.add(2,"hello"); //下标为2的位置添加元素 并把后面的元素进行唯一
System.out.println(list); //打印一个对象时默认调用的为toString()
List list2=new ArrayList();
list2.add("a");
list2.add("b");
list.addAll(list2);//添加多个元素 把list2中的每个元素一一添加到list中
System.out.println(list);
//删除操作
list.remove(2);//移除下标为2的元素
System.out.println(list);
list.clear();//清空集合中的元素.
System.out.println(list);
//修改操作
list.set(1,"刘德华");
System.out.println(list);
//查询的方法
Object o = list.get(1);//根据下标获取元素
System.out.println(o);
int size = list.size();//获取集合中元素的个数。
System.out.println(size);
boolean f = list.contains("java05");//判断元素是否在集合中
System.out.println(f);
int index = list.indexOf("java05");//查询元素在集合中第一次出现的位置
System.out.println(index);
//遍历集合中的元素 for循环
for(int i=0;i<list.size();i++){
Object o1 = list.get(i);
System.out.println(o1);
}
三 LinkedList
LinkedList linkedList=new LinkedList();
linkedList.add("java01"); //追加尾部
linkedList.addFirst("java02"); //添加到头部
linkedList.addLast("java03");//追加到尾部
linkedList.addFirst("java04"); //追加到头部
linkedList.addLast("java05");//追加到尾部
System.out.println(linkedList);
//删除操作
linkedList.removeFirst();//移除头部元素
System.out.println(linkedList);
linkedList.remove(2);//移除指定位置的元素
System.out.println(linkedList);
linkedList.removeLast();//移除尾部的元素
System.out.println(linkedList);
//修改操作
linkedList.set(1,"java11");
System.out.println(linkedList);
//查询操作
int size = linkedList.size();//求长度
boolean empty = linkedList.isEmpty();//是否为空
boolean b = linkedList.contains("java01");//判断元素是否在集合中
Object o = linkedList.get(1);//根据下标获取指定位置的元素
Object first = linkedList.getFirst();//获取第一个元素
System.out.println(first);
Object last = linkedList.getLast();
System.out.println(last);
四HashSet集合
// 元素排列无需不重复。
public class Test {
public static void main(String[] args) {
HashSet hashSet= new HashSet();
HashSet hashSet1 = new HashSet(16);//初始容器的大小
//loadFactor:--->0.7f 表示负载因子 当空间使用70%时 要求扩容
HashSet hashSet2 = new HashSet(16,0.7f);
//添加操作
hashSet.add("java01");
hashSet.add("java02");
hashSet.add("java04");
hashSet.add("java03");
hashSet.add("java02");
HashSet set2=new HashSet();
set2.add("刘德华");
set2.add("张学友");
set2.add("黎明");
hashSet.addAll(set2); //把set2中的每个元素添加到hashset中
System.out.println(hashSet); //元素不能重复 而且无序。
//删除
hashSet.remove("黎明");
// hashSet.clear();//清空容器集合
System.out.println(hashSet);
//修改操作
boolean empty = hashSet.isEmpty(); //判断是否为空
System.out.println(empty);
boolean b = hashSet.contains("刘德华");//判断元素是否在容器中
System.out.println(b);
hashSet的遍历
(1) //遍历--- foreach
for(Object o: hashSet){
System.out.println(o);
}
(2)通过迭代器来遍历
```
//迭代器遍历
Iterator iterator = hashSet.iterator();//获取迭代器对象 有序:有下标
while (iterator.hasNext()){//判断是否指定能够移动
Object next = iterator.next();//指定移动并获取当前的元素
System.out.println(next);
}
}
}
五 TreeSet集合。
TreeSet treeSet=new TreeSet();
treeSet.add("java05");
treeSet.add("java03");
treeSet.add("java04");
treeSet.add("java01");
treeSet.add("java02");
treeSet.add("java04");
System.out.println(treeSet);
存储一个对象类型:
public class Test {
public static void main(String[] args) {
TreeSet treeSet=new TreeSet();
treeSet.add(new Student("ropz",17));
treeSet.add(new Student("s1mp",16));
treeSet.add(new Student("niko",16));
treeSet.add(new Student("tiwzz",15));
System.out.println(treeSet);
}
}