java集合篇
java中的集合相当于一个容器,专门来储存java的对象,这些对象可以是任意数据类型,并且长度可变。
这些集合类都位于java.util中,引用时注意在代码最前面系统声明处加上import java,util.某某类
Collection(单列接口)有两个重要的子接口list和set。list接口主要特点是元素有序,可重复。list的主要实现类是ArrayList,LinkedList;set的主要实现类是HasSet和TreeSet.
Map(双列接口)学习后来补上
Collection接口定义了很多方法(看API吧,API的下载地址我放在了我的博客中可以下载,但是进去后的qq不是我请不要加哈)
list接口:可允许出现重复的元素,所有元素是以线性方式进行存储。特点元素有序(存入和取出顺序一致),继承了Collection的所有方法,同时拥有一些自己的方法(同样,去看API)
ArrayList集合:内部封装了一个长度可变的数组对象。长度可变的原因:当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来储存这些元素。优点:它查询,遍历非常高效。缺点:增删改非常低效,因为具有数组的所有特性。
例子:
import java.util.ArrayList;//导入集合类所在的包,同时也可以用“import Java.util.”,其中是通配符,整个语句的意思是将java,util中的内容全导入
public class ArrayListtest {
public static void main (String []args){
ArrayList list=new ArrayList();
list.add(“stu1”);
list.add(“stu2”);
list.add(“stu3”);
System.out.println(“集合长度:”+list.size());//这个方法可直接知道集合的长度
System.out.println(“第二个元素”+list.get(1));//可直接得到索引位置的元素,且索引是从0开始的
}
}
结果:
集合长度:3
第二个元素stu2
LinkedList集合:集合内有两个Node类型的first,last属性形成一个双向循环链表,LinkedListt集合对于元素的增删改操作十分高效,因为具有链表的特性。同样继承了list的所有方法,新增自己特有的方法,具体看API。
例子
import java.util.LinkedList;
public class LinkedListtest {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.add(“stu1”);
link.add(“stu2”);
link.add(“stu3”);
System.out.println(link);//输出link集合中所有元素,输出结果带【】
link.offer(“offer”);//元素增加在集合最后,还可用offerLast,addLast
link.push(“push”);//元素增加在集合第一个元素,还可用offerFirst,addFirst
System.out.println(link);
Object object = link.peek();//获取集合的第一个元素,还可用link.getFirst()
System.out.println(object);
// System.out.println(link.getFirst());
Object object1 = link.removeFirst();
Object object2 = link.pollLast();
//System.out.println(object1); 说明它确实会返回并删除第一个元素
System.out.println(link);
}
}
结果:
[stu1, stu2, stu3]
[push, stu1, stu2, stu3, offer]
push
[stu1, stu2, stu3]
Collection 集合遍历
1.Iterator遍历集合
Iterator对象也称为迭代器
例子:
import java.util.ArrayList;
import java.util.Iterator;
public class Itetatortest {
public static void main(String[]args){
ArrayList list=new ArrayList();
list.add(“stu1”);
list.add(“stu2”);
Iterator iterator=list.iterator();
while(iterator.hasNext()){
while(iterator.hasNext()){//hasNext指向第一个元素,next指向第一个元素前,每次调用,依次往后移动,当hasNext后面没有元素时会返回false.
Object obj=iterator.next();//hasNext()方法确定是否存在下一个元素,存在时才能使用next()方法,不存在时不能用,否则报错,NoSuchElementException异常。
System.out.println(obj);
// if("stu1".equals(obj))
// list.remove(obj);
// break;
// iterator.remove(obj);
//在使用Iterator迭代器进行遍历时,如果调用集合对象的remove方法来删除元素会出现异常如打开14-15行 // if(“stu1”.equals(obj))
// list.remove(obj);,但打开16行 break;异常会消失
// 因为集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。但如果只想将‘stu1’删除,至于后面还有多少元素我们不关心,也不继续迭代,那么跳出循坏即可,也不用担心迭代次数的问题
//如果需要在集合的迭代期间对集合的元素进行删除,可以使用迭代器本身的remove方法,即打开第17行 iterator.remove(obj);。//因为调用迭代器对象的remove()方法删除元素所导致的迭代次数变化,对于迭代器对象本身来说是可预知的 。此集合指这里的ArrayList集合,迭代器指Iterator.
}
}
}
结果:
stu1
stu2
2.Foreach遍历集合
//Foreach 方法格式:
//for(容器中的元素类型【一般用Object】 临时变量:容器变量【即想要遍历的对象】){执行的语句}
例子:
import java.util.ArrayList;
public class Foreachtest {
public static void main(String[]args){
ArrayList array=new ArrayList();
array.add(“stu1”);
array.add(“stu2”);
for(Object object:array){
// array.add(“stu3”);
System.out.println(object);
}
}
}
//与for循环相比,它不用获取容器的长度,也不需要用索引,它可以使用在数组和集合中,还有其他地方需要对使用场合自己有个判断,它直接自动的遍历元素中的每个元素,但缺点是它在遍历集合和数组的时候只能访问集合中的元素,不能对其中的元素进行修改,如打开第13行// array.add(“stu3”);会报错,但for循环既可以访问也能修改。
结果:
stu1
stu2