1.集合的概述:主要作用就是存储数据。解决了数组的缺点,也就是说我们在定义集合的时候不再声明大小。而且里面的数据默认是任意类型。集合的容量是随着数据的增加而自动增大。
2. 集合层次结构:最高的接口就是Collection,它有两个子接口,一个是无序的set,一个是有序的List.
还有一个Map,存储数据是键值对的方式来存储。
3. 有序集合list
有顺序的。
方法:
add() : 存数据
get() : 取数据
isEmpty(): 判断集合是否为空
size() : 获取集合中存储了多少元素
indexOf(): 查询数据在集合中的位置。
remove(index) :按照索引进行删除
remove(对象) : 删除集合中的某个对象
注意: remove,indexOf方法在执行的时候要调用对象的equals方法来做比较。只有返回true,才认为是相同的元素。否则不同。
新的循环:foreach循环
4. 无序集合 : 数据的摆放没有顺序。无序集合就不允许有重复的数据。
重复: 无序集合在存放数据的时候会自动调用对象的hashCode和equals方法两个来判断是否是同一个对象。先调用hashCode方法,如果HashCode返回值不一样,那么就直接认为是不同的对象(也就是说不用再调用equals方法做内容的比较了。)如果HashCode返回值一样,那么还要调用equals方法做比较,equals方法返回true才认为两个对象是一样的。否则不一样,这才是重复的含义。
常用方法:
add() : 存数据
get() : 取数据
isEmpty(): 判断集合是否为空
size() : 获取集合中存储了多少元素
remove(对象) : 删除集合中的某个对象
注意: remove,contains方法在执行的时候要调用对象的hashCode和equals方法来做比较。只有完全一致,才认为是相同的元素。否则不同。
泛型:集合的泛型主要是用来规定集合中存储数据的类型。
为什么用泛型?
好处: a. 可以提高效率。 (我们从集合中获取不再强制转换)
b . 把错误提示提前到了编译阶段。而不是运行阶段。
泛型需要用<>来表示,中间写集合中的数据类型。
泛型的写法:
List<String> list = new Arraylist() ;
List<String> list = new Arraylist<>() ;
List list2 = new ArrayLIst<String>() ; 写法编译通过,但泛型不起作用的。
List<Object> list3 = new ArrayList<String>() ; 编译都通过不了错误