集合与数组的区别:
1)从长度来讲:
数组:需要固定长度。
集合:长度可以改变,可以根据保存的数据进行扩容。
2)从存储内容上:
数组:可以存储基本类型数据,还可以存储引用类型的数据
集合:只能存储引用类型的数据,也就是说集合只能存储类的对象。
3)从存储类型上:
数组:只能存储相同类型的数据。
集合:可以存储不同类型的数据,集合中可以存储任意类型的引用数据类型。
Java针对这些所有集合容器取出数据的方式进行共性的抽取,于是针对所有的集合定义了一个接口,在这个接口中描述了所有集合容器的共性遍历规则。
注意:对于集合取元素,无论是什么数据结构,最终共性的取出方式:
一个一个取,取之前先判断,有,取一个,没有,结束。
这种取出的共性方式:迭代。迭代可以理解为取出或者遍历。
而这个接口它就是Iterator,它中定义了集合最基本的遍历方式:
//迭代遍历集合
Collection coll = new ArrayList();//发生多态
coll.add("123");
coll.add("456");
coll.add("789");
coll.add("abc");
coll.add("def");
coll.add("hij");
coll.add("lmn");
//it.hasNext()判断集合下一个是否有元素
for(Iterator it = coll.iterator();it.hasNext();){
System.out.println(it.next());
}
注意:在使用集合对象生成迭代器对象后,那么此时这个迭代器对象已经记录下来此时集合中的结构,在使用迭代器遍历的时候,一定记住**不能使用集合的对象**来对集合中的元素进行删除或者添加,如果要改动可以使用迭代器对象改动集合,如果要改动集合中的内容可以根据改动后的集合对象再重新生成迭代器对象。
//List集合
List list = new ArrayList();
list.add("abc");
list.add("def");
list.add(123);
list.add(true);
list.add(123);
System.out.println(list);
list.add(2,false);
System.out.println(list);
/*注意:
1)指定的下标前面一定要有数据;
2)添加不是覆盖,指定的位置添加了元素后,之前存在元素就会向后移动;*/
//获取方法
Object obj = list.get(3);
System.out.println(obj);
int i = list.indexOf(true);//没有返回-1
System.out.println(i);
Object obj1 = list.remove(5);
System.out.println(obj1);
//set(index,object)第一个是下标,第二个是替换的元素