- 前言
时间不知不觉过了好久了,一直没时间更新关于java的学习进度了,这段时间尝试接触了一些其他东西,兜兜转转.想回来将这个系列好好完成.我们在前面已经对java一些基本的高级特性进行了一些了解.但在学习swing 桌面程序开发的过程中,尝试了使用javafx.进行窗口程序的开发.对它有了一些了解,接下来就接着会到java核心知识的主线上来,看看java的集合类.
- 集合类
集合类可以看作是一个容器,什么是集合,就是一类事物,如红色的衣服,可以看作一个集合,所有关于java的书,也可以看作是一个集合.对于集合中的各个对象很容易将其存放在集合中.也很容易将其从集合中取出来.还可以按照一定顺序啦进行排放.
Java中提供了不同的集合类.这些类具有不同的存储对象的方式.并提供了相应的方法以方便用户对集合进行遍历,添加,删除以及查找储存对象的方式.并提供了相应的方法以方便用户使用集合.
我将通过本篇文章对java中的各种集合类进行简单的了解和学习.
- 概述
java.util包中提供了一些集合类,这些集合类又被称之为容器,提到容器我们又会想到数组(数组也可以说是储存数据的一种绝佳的容器).但集合类与数组的不同在于,数组的长度是固定的(一旦当它被创建)
,而集合的长度是可变的.数组用来储存基本数据类型的数据,集合类储存对象的引用.常用的集合有List集合,Set集合,Map集合.其中List与Set继承了Collection接口.各接口还提供了不同的实现类,上述集合类的继承关系:
- Collection接口
Collection接口是层次结构中的根接口,构成Collection的单位称为元素,Collection接口提供了添加元素,删除元素,管理数据的方法.由于List,Set接口都继承它,所以这些方法对他们也是通用的.
那么我们如何遍历一个集合中的元素呢,通常遍历集合都是通过迭代器(Iterator)实现的.Collection接口中的Intertor()方法就是返回在此Collection进行迭代的迭代器.
Collection list = new ArrayList<>(); // 实例化集合类对象
list.add("第一个Sting对象"); // 添加元素
list.add("第二个Sting对象");
list.add("第三个Sting对象");
list.add("第四个Sting对象");
list.add("第五个Sting对象");
Iterator it = list.iterator(); // 创建迭代器(实例化一个Interator)
while (it.hasNext()){ // 循环遍历 判断是否由下一个元素.
System.out.println((String) it.next()); // 获取集合中的元素.并输出.
}
我们也可以看看Collection接口的结构:
- List集合
List集合包括接口以及接口所有的实现类,List集合中的元素允许重复,各元素的顺序就是对象的插入顺序,类似java数组.用户可通过使用索引来访问集合中的元素.
- List接口
List接口继承了Collection接口,因此包含Collection中的所有方法,此外,List接口还定义了一下两个非常重要的方法.
get(int index)方法获得指定索引位置的元素.
set(int index,Object obj) 将集合中的指定索引位置的对象修改为指定的对象.
List接口的实现类
List接口的常用实现类有ArrayList 与 LinkedList.
ArrayList类实现了可变的数组,允许保存所有元素,包括null.并且可以根据索引位置对集合进行快速的随机访问;缺点就是向指定的索引位置插入对象或删除对象的速度变慢.
LinkedList 类采用链表结构保存对象,这种结构的有点就是便于向指定的索引位置插入对象或删除对象.需要向集合中插入,删除对象时,使用LinkList类实现的List集合的效率较高.但对于随机访问集合中的对象.使用LinkedList类实现的List集合的效率较低.
我们在使用的时候通常声明为List类型,可通过不同的实现类来实例化集合.
List
其中E可以是任意的java数据类型.
List arrayList = new ArrayList<>();
List linkedList = new LinkedList<>();
写个方法来对List方法进行一下学习.
void Gather(){
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
int i = (int) (Math.random()*list.size());
System.out.println(list.get(i));
list.remove(2);
for (int j=0;j
- Set集合
Set集合中的对象不按照特定的方式排列,知识简单的将对象加入集合中,但Set集合中不能包含重复对象,Set集合由Set接口和Set接口的实现类组成.Set接口继承了Collection接口,所以也包含它的所有方法.
- Set集合常用的是实现类有HashSet类与TreeSet类.
- HashSet类实现Set接口,由哈希表支持,它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变,此类允许使用null元素.
- TreeSet类不仅实现了Set接口,还实现了java.SortedSet接口.因此,TreeSet类实现的Set集合在遍历集合时,按照自然递增排序.既可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序.
我们写个小例子练习一下:
public void method(){
updatastu updatastu = new updatastu("小李",00001);
updatastu updatastu1 = new updatastu("小王",00002);
updatastu updatastu3 = new updatastu("小陈",00003);
updatastu updatastu4 = new updatastu("小吴",00004);
TreeSet tree = new TreeSet<>();
tree.add(updatastu);
tree.add(updatastu1);
tree.add(updatastu3);
tree.add(updatastu4);
Iterator iterator = tree.iterator(); // Set集合的迭代器.
System.out.println("遍历输出元素");
while (iterator.hasNext()){
updatastu stu = iterator.next();
System.out.println(stu.getId()+stu.getName());
}
iterator = tree.headSet(updatastu1).iterator();
System.out.println("截取前面部分元素:");
while(iterator.hasNext()){
updatastu stu=iterator.next();
System.out.println(stu.getId()+stu.getName());
}
iterator = tree.subSet(updatastu1,updatastu3).iterator();
System.out.println("截取中间部分");
while (iterator.hasNext()){
updatastu stu = iterator.next();
System.out.println(stu.getId()+stu.getName());
}
}
存入TreeSet类实现的Set集合必须实现Comparable接口,该接口中的CompareTo(Object o)方法比较次对象与指定的顺序.如果该对象小于,等于或大于指定对象,则分别返回负整数,0或正整数.
- Map集合
Map集合没有继承Collection接口,其提供的是key到Value的映射.Map中不能包含相同的key.每个key只能映射一个value.key还决定了存储对象在映射中的存储位置.但不是由key对象本身决定的,而是通过一种散列技术进行处理的.产生一个散列吗的整数值.
- Map接口
它提供了将key映射到值的对象.一个映射不能包含重复的key每个key最多只能映射到一个值,Map接口中同样提供了集合的常用方法.
我们在项目中新建一个Upstu方法来使用一下这几个方法.
void Upstu(){
HashMap map = new HashMap<>();
map.put("01","李同学");
map.put("02","魏同学");
Set set = map.keySet();
Iterator it = set.iterator();
System.out.println("key 中的元素");
while (it.hasNext()){
System.out.println(it.next());
}
Collection coll = map.values();
it = coll.iterator();
System.out.println("values 集合中的所有元素");
while(it.hasNext()){
System.out.println(it.next());
}
}
更新时间:
2019-5-15
11:53