奉天承运,博主诏曰:
集合框架和泛型
基础知识
java集合框架图
ArrayList常用方法
ArrayList 代码演示
public class TestArrayList {
public static void main(String[] args) {
ArrayList news=new ArrayList();//声明并分配空间
//元素增加
news.add("疫情动态");
news.add("春天来了");
news.add("汪峰头条");
news.add("拜登上台");
//System.out.println(news);//重写了toString方法,直接打印就可以
//三种遍历方式
//for循环
for (int i = 0; i <news.size() ; i++) {
System.out.println(news.get(i));//获取对应下标,越界会抛异常
}
//增强for
for(Object n:news){
System.out.println(n);
}
//迭代器for
Iterator iter=news.iterator();
while ((iter.hasNext())){
System.out.println(iter.next());//next()方法一次循环只能用一个
Object obj=iter.next();//如果需要使用当前元素多次,则用变量接收
System.out.println(obj);//多次调用时,直接使用接收的变量即可
System.out.println(obj+"");
}
//删除,插入和修改
// if(news.contains("疫情动态"))
// news.remove("疫情动态");//移除对象
// news.remove(1);//下标为1指定的是第二个插入的元素
news.add(1,"abc");//指定下标插入,同时后面的元素后移
news.set(1,"还有谁!");//指定下标修改元素
System.out.println(news);
}
}
LinkedList常用方法
LinkedList 代码演示
public class Node {//模拟链表的每一个节点
public Object element;
//下一个
public Node next;
//上一个,不定义上一个,是单向链表
public Node prev;
public static void main(String[] args) {
Node n1=new Node();
n1.element="我是第一个";
Node n2=new Node();
n2.element="我是第二个";
n1.next=n2;
Node n3=new Node();
n3.element="我是第三个";
n2.next=n3;
n2.prev=n1;
n3.prev=n2;
}
}
public class TestLinkedList {
public static void main(String[] args) {
LinkedList list=new LinkedList();
list.add("abc");
list.add("def");
list.add(123);
System.out.println(list);
list.addFirst("我就要当第一!");
list.addLast("我是最后!");
list.add(0,"我才是第一!");
System.out.println(list);
//在linkedList中使用下标吃力不讨好
}
}
Set接口
HashSet 代码演示
public class TestHashSet {
public static void main(String[] args) {
HashSet set=new HashSet();
set.add("abc");
set.add(123);
set.add("012");
set.add(1);
set.add(2);
set.add("2");
System.out.println(set);
}
}
本章总结
集合类:Collection(无序,可重复)
List:有序(插入顺序),可重复的
ArrayList:以数组作为底层存储(add(Object o)),add(int index,Object o))
add()方法插入元素
1.先判断容量是否越界,则扩容
1)扩容后比数组最大长度大,则是int的最大值作为长度
还没达到数组最大长度,则就是数组的最大值
2)正常来说扩容1.5倍,如果扩容1.5倍还不够
则直接把长度赋值给数组新长度
3)如果是新数组,长度和为10比较,把大的赋值给数组
2.不需要扩容则直接插入
由于底层是数组,遍历方便,随机访问方便(使用下标),改动方便
LinkedList:以链表作为底层存储
链表:多个Node互相存储地址,以下一个Node地址存储
遍历很不方便,增加Node和删除Node会很快
Vector:ArrayList的线程安全版,在多线程的状况下使用
Set:不可重复(元素),无序的
HashSet:是以HashMap的Key值的hash码来进行存储(保证唯一,理论上)
钦此。