最近学习了java中常用集合类的一些知识,在这里作为一只小白,我来谈谈我的理解,顺带总结知识点。
引入:在没有接触之前,听到集合,给我感觉是想到了数学中的集合一样,里面存放着一个一个的元素。其实不然,这个集合也就差不多,是用来存放元素的容器。
Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成。
今天我要谈的主要是,如下图所示:
1.Collection
Collection是最基本的集合类型,若要检查Collection中的元素,可以使用forEach遍历,也可以使用迭代器,实现了Collection接口的类,都可以这样操作。用法如下:
package集合;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;public classCollectionTest_1 {public static voidmain(String[] args) {
Collection collection = new ArrayList();
collection.add("苹果一");
collection.add("苹果二");
collection.add("苹果三");//第一种方式通过forEach遍历打印
System.out.println("通过forEach遍历打印如下:");for(String str:collection){
System.out.println(str);
}
System.out.println("-------------------------");//第二种方式通过iterator遍历打印
System.out.println("通过iterator迭代器打印如下所示:");
Iterator it =collection.iterator();while(it.hasNext()){
System.out.println(it.next());
}
}
}
1.1 List 接口
List是Collection派生的接口,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引的位置来访问List中的元素,类似于Java数组。
List允许有相同的元素存在。
除了具有Collection接口必备的的iterator()方法外,还提供了listIterator()方法,放回一个 ListIterator接口。
实现List接口的常用类有LinkedList、ArrayList、Vector和Stack,下面来简单介绍。
1.1.1 ArrayList 类
ArrayList从数据结构上来说,为顺序线性结构,用户若要对数据经常查阅或者是获取数据时,本类为用户的最佳选择类。常用方法: add();addAll();get();size();set();remove();isEmpty();至于它们的例子,我就不一一举了,更多的方法可通过Api文档去查阅。
1.1.2 LinkedList 类
LinkedList实现了List类接口,允许null元素。此外LinkedList提供额外的add、get、remove、insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)
LinkedList较ArrayList而言,若用户对数据经常进行插入或者是是删除之类的话,那么用本类为最优选择。
1.1.3 Stack 类
stack翻译过来为栈,在前面讲到堆栈模型的时候,我们就知道了它有先进后出的特点。
Stack继承自Vector,实现了一个后进先出的堆栈。Stack提供了5个额外的方法使得Vector得以被当做堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,serach方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
请看下面的代码,简单理解Stack的常用方法:
1 package集合;2
3 importjava.util.Stack;4
5 public classStackTest1 {6 public static voidmain(String[] args) {7 Stack st = new Stack();8 st.push(1);9 st.push(2);10 st.push(3);11 st.push(4);12 st.push(5);13
14 System.out.println(st.pop());//5 栈顶的那一个是一个最先出来的
15 System.out.println("栈的长度为:"+st.size());//4 计算移除栈中的尺寸16 //st.peek();是指要将栈中的某一个元素拿出用,但它仍在栈中,栈中的长度与没执行这条语句之前是一样的
17 System.out.println(st.peek());//4
18 int value = st.peek();//4 将要用到集合中的值得时候,就用peek()方法
19 int a =10;20 int result = value+a;//result=4+10=14
21 System.out.println(result);//14
22 System.out.print("栈的长度为:"+st.size());//4 计算移除栈中的尺寸
23
24 }25 }
输出结果为:
5
栈的长度为:4
4
14
栈的长度为:4
至于结果,代码中注释写的比较清楚了,这里我就不在说了。
LinkedList可以被用作堆栈、队列等。举个例子:
下面是一个LinkedList集合实现堆栈的代码:
1 public classLinkedListTest1 {2 public static voidmain(String[] args) {3 LinkedStack ls = newLinkedStack();4 Apple apple1 = new Apple("苹果一");5 Apple apple2 = new Apple("苹果二");6 Apple apple3 = new Apple("苹果三");7 ls.push(apple1);8 ls.push(apple2);9 ls.push(apple3);10
11 System.out.println(ls.pop());12 System.out.println(ls.pop());13 System.out.println(ls.pop());14 }15 }16 classLinkedStack {17 private LinkedList list = new LinkedList();18 public voidpush(Apple apple){19 list.addLast(apple);20 }21 publicApple pop(){22 returnlist.removeLast();23 }24 }25 classApple{26 String name;27 publicApple() {28 }29 publicApple(String name) {30 super();31 this.name =name;32 }33 publicString getName() {34 returnname;35 }36 public voidsetName(String name) {37 this.name =name;38 }39 @Override40 publicString toString() {41 return "圣诞苹果 [name=" + name + "]";42 }43 }
输出结果为:
圣诞苹果 [name=苹果三]
圣诞苹果 [name=苹果二]
圣诞苹果 [name=苹果一]
可以看到,先进后出的特点。
1.2 Set
Set是一种不包括重复元素的Collection,即它里面的任意两个元素a,b,都有a.equals(b)=false。
很明显的可以知道Set有个约束条件,传入的collection参数不包含重复元素。
1.2.1 HashSet
哈希结构,特点是无序不重复,请看案例:
1 public classHashSetTest_1 {2 public static voidmain(String[] args) {3 Set set = new HashSet<>();4 set.add("第一个");5 set.add("第二个");6 set.add("第三个");7 set.add("第一个");8 set.add("第四个");9 System.out.println(set.size());//4
10 for(String str:set){11 System.out.println(str);12 }13 }14 }
输出结果:
4
第二个
第四个
第三个
第一个
可以看到:1.我在set中添加了五个元素,有相同的元素,值读出了一个。说明了不重复的特点。
2.输出的结果顺序,与我添加的顺序完全不同,则说明了它的无序特点。
2.Map
Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。
2.1 HashMap
多用于通过键值获取值得查询。与HashMap类似的有HashTable,这里就不祥说区别了。这个HashMap的用法,我就不贴代码了,请谅解。
以上,就是作为一只小白,在最近学的知识,做出了自己的一点理解,文中如果有不对的地方,还请各位大佬们,给我指出来。
需更多的了解和学习请进入:
知了堂官网 www.zhiliaotang.com