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集合及其方法的更多相关文章

  1. java集合的方法及使用详解

    一.java集合的分类及相互之间的关系 Collection接口:向下提供了List和Set两个子接口 |------List接口:存储有序的,存储元素可以重复 |------ArrayList(主要 ...

  2. Java集合排序方法comparable和comparator的总结

    一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...

  3. java集合循环删除

    java集合循环删除,java list集合操作,java循环.分享牛,分享牛原创.java集合删除方法. 2.6.1.第一种方式 list.add("1"); list.add( ...

  4. 深入理解java集合框架之---------Arraylist集合 -----添加方法

    Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...

  5. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  6. Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别

    本篇博客主要讲解List接口的三个实现类ArrayList.LinkedList.Vector的使用方法以及三者之间的区别. 1. ArrayList使用 ArrayList是List接口最常用的实现 ...

  7. Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别

    本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...

  8. Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及区别

    本篇博客主要讲解Map接口的4个实现类HashMap.Hashtable.LinkedHashMap.TreeMap的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 ...

  9. Java集合Map基本方法

    jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Map为所有Map子类的接口.

随机推荐

  1. 连接器与容器的桥梁——CoyoteAdapter

    如果把整个tomcat内核最高抽象程度模块化,可以看成是由连接器Connector和容器Container组成,连接器负责HTTP请求接收及响应,生成请求对象及响应对象并交由容器处理,而容器则根据请求 ...

  2. Java实现堆的封装,进行插入,调整,删除堆顶以完成堆排序实例

    简介 堆对于排序算法是一个比较常用的数据结构,下面我就使用Java语言来实现这一算法 首先,我们需要知道堆的数据结构的形式,其实就是一个特殊的二叉树.但是这个二叉树有一定的特点,除了是完全二叉树以外, ...

  3. Java创建二叉搜索树,实现搜索,插入,删除操作

    Java实现的二叉搜索树,并实现对该树的搜索,插入,删除操作(合并删除,复制删除) 首先我们要有一个编码的思路,大致如下: 1.查找:根据二叉搜索树的数据特点,我们可以根据节点的值得比较来实现查找,查 ...

  4. TCP的ACK确认系列 — 延迟确认

    主要内容:TCP的延迟确认.延迟确认定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 延迟确认模式 发送方在发送数据包时,如果发送的数据包有 ...

  5. Linux Debugging(二): 熟悉AT&T汇编语言

    没想到<Linux Debugging:使用反汇编理解C++程序函数调用栈>发表了收到了大家的欢迎.但是有网友留言说不熟悉汇编,因此本书列了汇编的基础语法.这些对于我们平时的调试应该是够用 ...

  6. 面向对象编程(OOP)的五大特征-java学习之旅(1)

    这是Alan Kay关于第一个成功的面向对象语言SmallTalk的总结: 1.所有的东西都是对象.可将对象想象成一种新型的变量:它保存着数据,但是可要求它对自身进行操作,理论上讲,可从要解决的问题身 ...

  7. MyBatis - 介绍、简单入门程序

    JDBC编程中的问题     1. 将SQL语句硬编码到Java代码,不利于系统维护.         设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...

  8. SQL2008清除数据库日志脚本

    --数据库名称sjjhzx,日志文件名称ksoa_zuizhong_Log' USE sjjhzx    GO    ALTER DATABASE sjjhzx SET RECOVERY SIMPLE ...

  9. (二十一)即时通信的聊天气泡的实现II

    一些优化: 禁止TableView的点击: self.tableView.allowsSelection = NO; 合并相同的时间: 不需要显示的时间,只要不设置尺寸就行了. 一个if判断的技巧,为 ...

  10. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...