java中的集合
Collection接口
Collection集合只能存储单个元素,也就是说:里面不能存储数组,集合,并且里面只能保存引用数据类型,不能包含基本数据类型,里面保存类型都是java.lang.Object;所以:集合保存元素不是不区分类型,而是因为多态,所有的类型都会自动向上转型为Object类型;所以说集合实际上也是要求数据类型的.同时这些不同的对象都丢失了自己自定义的属性.
集合中包括List和Set,另外还有Map不属于集合但与集合的操作形式相似(几乎相同).
因为Collection是接口,所以只能多态调用这些方法
方法---数据操作
增 boolean add();//往集合中添加元素
删 void clear()://清空集合,删除所有的元素
boolean remove()//删除某个特定元素
查 boolean isEmpty();
boolean contains(Object o);//集合中是否可以包含某个元素
int size()://返回集合所有包含元素的个数
遍历:
Iterator iterator
Iterator:迭代器
Iterator类有有三个方法
1 boolean hasnext():判断游标的下一位是不是还有元素,如果有,就返回true,如果没有就返回false;
2 next(): 将迭代器向下移动一位,并且取出将要指向的元素
3 remove():删除当前指向的元素
原则上上面三个都必须按照这个顺序调用
remove()和contains()都需要重写equals().因为他们都需要调用equals()方法来定位元素,但是Object中的equals比较的是内存地址,所以我们需要重写,用对象本身的内部属性来进行对象的比较.两个对象的内存地址肯定不同,但是如果都是实例化于同一个类,那么他们的属性是肯定相同,那么我们比较的是属性的值.
在循环删除集合多个元素的时候,只能使用迭代器的remove()方法,因为集合自身的remove()方法删除以后,集合就变了,如果集合当中内容改变以后,就必须重新获取迭代器;我们迭代器在迭代的时候,有个遍历列表根据这个里面的元素然后contains方法/equals()再进行需要的操作.迭代器的删除可以用迭代器直接循环删除,集合自身删除或者循环删除不能和迭代器产生相关,当进行删除后不能再调用迭代器,否则会报错ConcurrentModificationException.
集合的遍历输出有以下几种方式:
while-迭代器遍历
for-迭代器遍历
foreach-迭代遍历
for-get遍历(只有List才可以,set,map都不可以)
List(元素有序,可重复)包括ArrayList和LinkedList两种形式(Vector已不常用).
Set(元素无序,不可重复)包括HashSet,SortedSet和TreeSet三种.
Map(元素无序,可重复)包括HashMap,SortedMap和TreeMap.
类型检查:编译过程中,检查数据类型是否匹配
什么是泛型:
集合实际上和数组是一样的,一个集合只能装同一数据类型的数据.之所说集合可以放下任意的数据类型,是因为所有的数据类型都进行了向上转型,变成了Object类型.转型以后,子类对象的属性就丢失了.就访问不到了.如果我们需要使用某一个对象特有方法的时候,就需要向下转型.
但是这样频繁类型转化不是太好.所以后来就提出了泛型的概念.
泛型就像我们的中药柜子一样,给每个集合显式指定它要保存的类型,就相当于贴个标签指定保存什么.在加入数据之前,先对数据类型进行检查,然后再放进去,这就是泛型.
优点:统一了数据类型,减少强制类型转换.
缺点:只能存储单一类型的数据
Collection<String> strs = new ArrayList<String>();
List<String> strs = new ArrayList<String>();
Map<String, Integer> maps = new HashMap<String,Integer>();