集合框架
java.lang.iterable ← java.util.Collection接口
Collection接口下还有 List接口 和 Set接口;
List接口 可以存储一组不唯一 、有序的对象(可以是null);常用实现类有 ArrayList 和 LinkedList。
1、 ArrayList集合类
-
与数组的区别:
对数组进行了封装,实现了长度可变、可添加任何数据类型的动态数组,添加的数据都将转成Object类型。
数组一旦定义长度不可变,只能添加一种数据类型。
相同点:都是采用在内存中分配连续的空间
-
常用方法
方法 说明 boolean add(Object o) 在列表的末尾添加元素o,起始索引位置从0开始 void add(int index,Object o) 在指定的索引位置添加元素o,索引位置必须介于0和列表中元素个数之间 int size() 返回列表中的元素个数 Object get(int index) 返回指定索引位置处的元素,取出的元素是Object 类型,使用前需要进行强制转换 void set(int index,Object o) 将 i 索引位置的元素换为o元素 boolean contains(Object o) 判断列表中是否存在指定元素o int indexOf(Object o) 返回o元素在集合中出现的索引位置 boolean remove(Object o) 从列表中移除元素o Object remove(int index) 从列表中删除指定位置的元素,起始索引位置从0开始
2、LinkedList
-
采用链表存储方式存储数据
-
优缺点:
- 优点是 插入删除元素时效率比较高
- 缺点是 查找的效率很低
-
支持实现所有List接口可选的列表的操作,并且允许元素值是任何数据,包括null
3、Iterator接口
-
Iterator接口表示堆集合进行迭代的迭代器,专门实现集合的遍历
-
因为它间接继承了iterable,所以它也可以用foreach遍历
-
常用方法:
- hasNext():判断是否存在下一个可以访问的元素,如果仍有元素可迭代,则返回true
- next():返回要访问的下一个元素
-
遍历代码:
ArrayList list = new ArrayList; list.add("张三"); list.add("王二"); list.add("麻子"); Iterator it = list.iterator(); while(it.hastNext()){ System.out.println(it.next()); //String s = (String)it.next(); 从Object类型转String类型 //System.out.println(s); }
小灶
1、能被称为修饰符的只有:
public、package、private、protected、abstract、final、static
2、为什么要有get/set方法?
因为可以用get/set方法判断输入的数据是否合理,拒绝不合理数据
3、String s = new Student(); 做了什么?
new Student()在堆中开辟了一个空间- 这个空间的大小由这个类的成员变量决定:
- String类型是引用类型,空间里存储的是地址,地址约为int类型的,所有开4个字节空间
- int类型占四个字节的空间;char类型占2个字节空间
- 一共至少需要:4+4+2=10个字节空间
- 空间有了以后JVM给了默认值:0
- String类型的默认值是null,调用
System.identyHashCode(引用变量),输出为 0 ;System.identyHashCode(引用变量)获取由Object提供的hachCode方法所返回的值
- int默认值是0;
- char默认值是空白(\u000)不是空格,在eclipse中为0的char 输出是个方块,在其他编译器里可能是个空白,char默认值的二进制数就是0;
- boolean的默认值是false,也是0(true = 1,false = 0);在内存中只占1个二进制位,但是磁盘的最小单位是1字节。
- String类型的默认值是null,调用
- 赋完默认值后才会执行"{ }"里的内容({ }、static{ })
- 然后执行构造方法
6、构造方法相关
- 构造方法和非static修饰的都是实例
- new + 构造器 一起返回了一个new的空间的首地址,将这个地址给了一个变量,所以
String s = new Student()中其实new Student()才是对象,s 只是接收这个对象的变量。 s.setName("Amy")//main() 调用了 s 的setName方法 设置了name 属性的值后 没有返回值;this.name = Amy//我 (this) 的( . ) 名字( name ) 是( = ) Amy