一个集合类 ArrayList
底层是一个数组结构(因为数组是不可变的,所以会新创一个数组 长度是list+1或-1,执行添加删除操作后,把原数据放到新数组中)
满足了可变数组的实现
E是泛型,ArrayList == ArrayList 这里E是String类型。
泛型只能是引用类型,不能是那八大基本类型 集合里面保存的都是地址值(只能是对象),如果想向集合中插入八大基本类型,那么可以把基本数据类型包装为引用数据类型就OK了。
创造一个ArrayList集合,名称是list,里面装的都是String字符串类型的数据。
ArrayList<String> list = new ArrayList<>();//创造对象
创造一个ArrayList集合,名称是array,里面装的都是String字符串类型的数据。JDK1.7以后右侧的<>内可以不写。<String> 泛型(都是这个类型)
add(); 添加元素到队尾
public class Demo01ArrayList {
public static void main(String[] args) {
//创造一个ArrayList集合,名称是array,里面装的都是String字符串类型的数据。
ArrayList<String> list = new ArrayList<>();
//add队尾添加元素 注意看帮助文档,返回类型boolean
list.add("wei");
list.add("shan");
list.add("3");
list.add("4");
boolean add = list.add("5");
System.out.println(add);
// remove 移除指定下标元素,返回被移除这个值
String a=list.remove(3);//index下标的意思
System.out.println("删除的是"+a);//remove(); 有返回值,被删除的数
System.out.println(list);//特例:直接对象名就可以输出地址,因为源码处理过,重写的toString方法
int size = list.size();//获取集合长度
System.out.println("集合长度"+size);
//集合的遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
ArrayList重写了Object的toString();方法正常情况下,Object输出的是对象的(hashcode)地址,但是这里能直接输出array的值。重写了Object的toString();方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79zccmKK-1624870855519)(C:\Users\韦善涛\AppData\Roaming\Typora\typora-user-images\image-20210426152222214.png)]
理解,返回值类型是E下划线(返回一个E(String)类型的参数)remove(); 方法的源码是 return oldValue;。E下划线表示
集合的遍历
快捷键 (集合名字).fori ==》生成根据集合长度的循环。
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
集合都是引用
泛型只能是引用类型,不能是那八大基本类型 集合里面保存的都是地址值,集合无法直接储存基本类型,可以储存包装类。
集合:ArrayList list = new ArrayList<>();
如果想向集合中插入八大基本类型,那么可以把基本数据类型包装为引用数据类型就OK了。
基本类型对应的包装类
基本类型 | 包装类(引用类型)都位于java.lang包 |
---|---|
byte | Byte |
short | Short |
int | Integer [特殊] |
long | Long |
float | Float |
double | Double |
char | Character [特殊] |
boolean | Boolean |
从JDK1.5开始,支持自动拆箱,装箱。
包装类就可以添加 list3.add(1);(可以添加int的基本数据类型)
public class Demo02 {
public static void main(String[] args) {
ArrayList<String> list2 =new ArrayList<>();
list2.add("wei");
System.out.println(list2);
ArrayList<Integer> list3 =new ArrayList<>();
list3.add(1);//这里边隐含了一个装箱(new Integer(1))
System.out.println(list3);//判断得出结论,输出不是对象的hashcade值,因为源码重写了toString方法
}
}
//打印
[wei]
[1]
ArrayList长度获取和数字的长度获取不太一样:
快捷键:list.fori
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
数组:
int[] a={1,99,65,25,5,8,7,6,9,0};
System.out.println(a.length);
linkedList集合 implements List接口
特点:底层是一个链表结构(1.查询慢增删快,2.里边包含了大量操作首位元素的方法。注意:使用linkedList集合特有的方法不能使用多态了(多态的弊端是看不到子类独有的方法))