java集合及其方法
1.集合框架
我们已经学习过使用数组来批量存储某一类数据;
但是,数组还是存在一些不足,比如长度不可变(建立对象的时候就已经定义好长度);
查找某一个数据时,要依靠索引值来遍历数组进行条件查找,数据量很大时就很耗时;
于是,就有了某一类长度可变,不依靠索引查找的存储数据的方法------集合。
实现这一功能的类(接口)有两种:Collection接口、Map接口;
Collection接口下有三个子接口:List接口、Set接口、Queue接口(不常用)
我们常用到的这些接口下的类有:ArrayList类(List接口)、HashSet类(Set接口)、HashMap类(Map接口)
2.ArrayList类及其方法
List list = new ArrayList(); //父类的引用指向子类的对象,这是向上类型转换
list.add(Obj); //用add()方法向该数组列表末尾位置添加一个对象
list.add(n,Obj); //向索引 n 位置插入对象Obj,前提是列表长度大于n-1
list.get(0); //返回list这个数组列表的索引为0位置上的对象,注意这是一个对象
小贴士:如果我们向list中add的对象是一个Course Obj = new Course()出来的对象,那么,
读出来的时候Course temp = (Course)list.get(0);强制转换类型(Course).
3.批量添加多个对象(addAll())
Course[] Obj2 = {new Course(1,"高等数学"),new Course(2,"经济学")}; //定义一个Course数组
list.addAll(Arrays.asList(Obj2)); //先把数组转化为数组列表,然后添加到list中
list.addAll(n,Arrays.asList(Obj2)); //向索引为n的位置添加数组列表
4.数组列表的长度以及遍历
我们知道一个数组的长度可以通过length来获得;
但是,一个数组列表的长度呢?那就是size()方法;
private void show() {
int size=list.size();
for (int j=0;j<size;j++) {
Courses temp =(Courses)list.get(j);
System.out.println("课程编号:"+temp.id);
System.out.println("课程名称:"+temp.name);
}
}
5.删除list数组列表中的对象(组)
删除单个对象:
list.remove(index); //删除数组列表索引位置上的元素(对象)
Course cr =(Course) list.get(index);
list.remove(cr); //先传递对象,再删除对象
删除多个对象(组):
Course [] courses = {(Course)list.get(4),(Course)list.get(5)}; //获取4、5位上的对象,集合成一个数组
list.removeAll(ArrayasList(courses)); //数组转化为数组列表,然后删除
6.泛型
所谓泛型是指,在新建数组列表的时候就人为规定存进去的数据类型,如果存了规定类型及其子类型
之外的类型,会报错如果没有应用泛型,那么默认是Object,这就是为什么前面遍历时,读取数组列表
对象的时候会要求强制转化对象为Course类型,因为拿出来的时候数据是一个Object类型的。
List <Course> list = new ArrayList <Course>();//泛型定义,规定这个list数组列表只能存Course类及其子类对象
泛型规定的类型不能是基本数据类型,如int double,如果一定要用,则要用他们的包装类Integer、Double等
7.Map接口HashMap类
与List不同的是,Map接口为集合中的每个对象定义了一个人为设定的Key值,Map集合是无序的;
所以不存在List类的索引,查找时是根据Key查找的。他的泛型定义如下
Map courselistofmap <K,V> = new HashMap<K,V>(); //K表示Key值的类型,V表示数组对象的类型
Course cour = new Course(201703,"线性代数"); //新建一门课程,包括课程编号和课程名称
courselistofmap.put(Key,cour); //HashMap列表的对象插入采用put()方法
Key是插入的时候定义的,在这里为了记忆
一般引用传入的课程编号作为Key值
Set <int> keyset = courselistofmap.keySet(); //Map接口下的keySet()方法返回所有键的集合
Set <Entry<int,Course>> entryset = courselistofmap.entrySet(); //entrySet()返回所有键值对集合
HashMap列表中每个对象称为entry(键值对)
在键值对中,这个值又是一个对象,在这里是课程对象
for(Entry<int,Course> entry:entryset) { //foreach遍历键值对集合
System.out.println(entry.getKey()); //单个键值对(entry)的getKey()方法返回键
System.out.println(entry.getValue().name); //getValue()方法返回值(课程对象)
}
Course newcour = new Course(201704,"经济法"); //新建一个新的课程
courselistofmap.put(Key,newcour); //用新对象替换之前Key位置上的对象
方法归类:
List list1 = new ArrayList(); //新建一个ArrayList对象list1(有序列表)
list1.add(Obj); //向数组列表末尾添加对象Obj
list1.add(n,Obj2); //向n索引位置添加单个对象Obj2,原先对象被挤到后一位
list1.get(n); //取得n索引位置上的对象(对象类别是Object操作时要强转)
list1.addAll(Arrays.asList(arr)); //先将对象数组转化为数组列表,然后添加到数组列表list1中
list1.size(); //数组列表的长度
list1.remove(n); //删除n索引位置上的对象
list1.remove(list1.get(2)); //删除列表索引2位置上的对象list1.get(2)
list1.removeAll(ArraysasList(arr)); //删除一个由原列表中对象组成的数组
List <Course> list2 = new ArrayList<Course>(); //泛型,定义数组列表时就规定了接受的对象类型只能是Course
Map <K,V> list3 = new HashMap <K,V>(); //新建一个Map哈希表,表中对象都是一个Entry对象(键值对)
list3.put(Key,Obj3); //向一个哈希表中添加一个Entry对象(Key,Obj3),
或者修改Key所对应的映射
list3.keySet(); //返回哈希表的所有键的集合
list3.entrySet(); //返回哈希表的所有键值对的集合,相当于n个Entry对象(键值对)
entry.getKey(); //返回单个Entry对象的Key值
entry.getValue(); //返回单个Entry对象的Value值(一个对象)
java集合及其方法的更多相关文章
- java集合的方法及使用详解
一.java集合的分类及相互之间的关系 Collection接口:向下提供了List和Set两个子接口 |------List接口:存储有序的,存储元素可以重复 |------ArrayList(主要 ...
- Java集合排序方法comparable和comparator的总结
一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...
- java集合循环删除
java集合循环删除,java list集合操作,java循环.分享牛,分享牛原创.java集合删除方法. 2.6.1.第一种方式 list.add("1"); list.add( ...
- 深入理解java集合框架之---------Arraylist集合 -----添加方法
Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...
- 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...
- Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别
本篇博客主要讲解List接口的三个实现类ArrayList.LinkedList.Vector的使用方法以及三者之间的区别. 1. ArrayList使用 ArrayList是List接口最常用的实现 ...
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别
本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及区别
本篇博客主要讲解Map接口的4个实现类HashMap.Hashtable.LinkedHashMap.TreeMap的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 ...
- Java集合Map基本方法
jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Map为所有Map子类的接口.
随机推荐
- Android项目-高考作文-抽象BaseAdapter
1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...
- Unity插件 - MeshEditor(一) 3D线段作画 & 模型网格编辑器
之前,因为工作需要,项目中需要动态生成很多的电线,不能事先让模型做好,更不能用LineRenderer之类的,因为画出来没有3D的效果,最主要是拐角的时候还容易破面,而我们要的是真真实实纯3D的电线, ...
- Android轶事之View要去大保健?View大小自己决定?
-"爹,我要吃糖" -"好哒儿子" -"爹,我要吃包包" - "好哒儿子" - "爹,我要吃串串" ...
- C#之结尾篇
在Top10语言中,C#是最优美的语言,没有之一,在Top10语言中,C#所可用的标准库及可获得其他库是最强大的之一,这个必须带上之一,因为有java在,在Top语言中,C#语言是性能最高的语言之一, ...
- 一个简单的多机器人编队算法实现--PID
用PID进行领航跟随法机器人编队控制 课题2:多机器人编队控制研究对象:两轮差动的移动机器人或车式移动机器人研究内容:平坦地形,编队的保持和避障,以及避障和队形切换算法等:起伏地形,还要考虑地形情况对 ...
- Win8 HTML5与JS编程学习笔记(一)
微软的Visual Studio提供了多种构成win8应用的方式,其中最让我感到激动的是基于网页设计语言的开发模式,它提供了结合HTML5与Javascript来开发应用的方法,通过这种方法进行开发, ...
- SQL-Teradata基础
1.创建一个和表 pnr_1 结构一样的表 Create table pnr_2 as pnr_1 with no data 不含数据 Create table pnr_2 as pnr_1 wit ...
- TinySpring分析二
step5 看完了前面的几步,到现在我们必然要想到的问题就是,数据要是放在xml中怎么读? 其实按照正常思维一步一步来,从xml中读数据和之前手工配进去并没有什么大的区别,只要读出来就OK了. 先看测 ...
- 【58】Spring总结之注解(2)
启用注解配置: 1.context:annotation-config 该配置表示启用注解. 2.context:component-scan base-package="." 该 ...
- Swift之GCD 使用指南2
Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸 ...