一、    什么是集合:
  在Java中提供了一些可以保存同一数据类型的数据集称为集合,就是规定了一些集合的规范(接口、抽象类、实现类)及方法,
  方便我们程序在保存数据时进行增、删、改、查操作,编程更加高效。
二、 List集合:
  List集合特性:List集合(ArrayList、LinkedList)是可重复的、有序的(是原始顺序)
  1、ArrayList实现类:底层采用数组实现,查询可以通过下标快速点位,查询速度快,针对添、删、改速度慢
  2、LinkedList实现类:底层采用双向链表实现,添加、删除时通过修改操作元素的前后索引值即可,效率高;
    针对查询就需要从第一个查询到最后一个,查询效率低
package com.oop.ch07.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import com.oop.ch07.Dept; /**
*练习List集合的使用:ArrayList、LinkedList
*
*/
public class ListTest { //测试arraylist的基本用法
@Test
public void testArrayList1() {
List arrayList1 = new ArrayList();
//将元素值追加到集合中
arrayList1.add("aa");
arrayList1.add("gg");
arrayList1.add("bb");
arrayList1.add("cc");
//将元素值插入到index(从0开始)指定的位置,其他的元素往后挪
arrayList1.add(1, "mm");
for (Object a : arrayList1) {
System.out.println(a);
}
System.out.println("----------------------");
Integer element0 = (Integer) arrayList1.get(0);
System.out.println(element0); } //泛型
@Test
public void testArrayList2() {
//在创建实现类ArrayList的对象时,Java7.0及以上的版本泛型会参考左边
List<String> arrayList1 = new ArrayList<String>();
//将元素值追加到集合中
arrayList1.add("aa");
arrayList1.add("gg");
arrayList1.add("bb");
arrayList1.add("cc");
//将元素值插入到index(从0开始)指定的位置,其他的元素往后挪
arrayList1.add(1, "mm");
for (Object a : arrayList1) {
System.out.println(a);
}
System.out.println("----------------------");
//添加泛型以后可以将运行时异常提前为检查性异常,更容易被发现此异常,并及时处理
//Integer element0 = (Integer) arrayList1.get(0);
String element0 = arrayList1.get(0);
System.out.println(element0); } //基本数据类型和包装数据类型
@Test
public void arrayList3() {
List<Float> studentNos = new ArrayList<Float>();
//自动装箱:能将基本数据类型(float)自动转换为包装数据类型(Float)
studentNos.add(1.0F);
studentNos.add(2.0F);
//自动拆箱:能将包装数据类型自动转换为基本数据类型
float no1 = studentNos.get(1);
System.out.println(no1);
} /**
* 练习List(ArrayList、LinkedList)集合中提供的常用方法
*/
@Test
public void arrayList4() {
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("aaa"); //在集合中从前向后查找指定的元素值对应的索引位置
int index1 = list.indexOf("aaa"); //从前往后
System.out.println(index1); //在集合中从后向前查找指定的元素值对应的索引位置
int index2 = list.lastIndexOf("aaa"); //从后往前
System.out.println(index2); //判断集合中是否包含指定的元素,包含为true
//list.contains("ccc");
System.out.println(list.contains("ccc")); //通过索引删除指定位置的元素,返回删除的元素值
list.remove(3);
System.out.println(list.remove(3)); //通过元素删除对应的元素,返回是否删除成功
//list.remove("bbb");
System.out.println(list.remove("bbb")); //返回集合元素个数
System.out.println(list.size()); //Iterator迭代器,循环遍历元素
/*
* 返回该集合的所有元素,并把他们放置到一个iterator迭代器中,
* it.hasNext():返回迭代器中是否还有下一个元素
* it.net():返回正在迭代的元素值,将指针向下移动一个单位
*/
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} /**
* 练习LinkedList集合中提供的常用方法
*/
@Test
public void testLinledList() {
List<String> list = new LinkedList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("aaa"); for (String element : list) {
System.out.println(element);
} //在集合中从前向后查找指定的元素值对应的索引位置
int index1 = list.indexOf("aaa"); //从前往后
System.out.println(index1); //在集合中从后向前查找指定的元素值对应的索引位置
int index2 = list.lastIndexOf("aaa"); //从后往前
System.out.println(index2); //判断集合中是否包含指定的元素,包含为true
//list.contains("ccc");
System.out.println(list.contains("ccc")); //通过索引删除指定位置的元素,返回删除的元素值
list.remove(3);
System.out.println(list.remove(3)); //通过元素删除对应的元素,返回是否删除成功
//list.remove("bbb");
System.out.println(list.remove("bbb")); //返回集合元素个数
System.out.println(list.size()); //Iterator迭代器,循环遍历元素
/*
* 返回该集合的所有元素,并把他们放置到一个iterator迭代器中,
* it.hasNext():返回迭代器中是否还有下一个元素
* it.net():返回正在迭代的元素值,将指针向下移动一个单位
*/
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} /*
* 在List中放实体,实体类代码放在最后
*/
@Test
public void testArrayListEntity() {
List<Dept> deptList = new ArrayList<Dept>();
deptList.add(new Dept("人事部","北京"));
deptList.add(new Dept("财务部","上海"));
deptList.add(new Dept("公关部","昆明"));
deptList.add(new Dept("综合部","山东")); for (Dept dept : deptList) {
System.out.println(dept);
}
}
}
三、    Set集合:
  1、HashSet实现类:不可重复的、是无序的,Hash算法就是随机算法。
package com.oop.ch07.test;

import java.util.*;

/*
* 练习HashSet集合的使用
*/
public class HashSetTest { public static void main(String[] args) {
Set<String> set = new HashSet<String>(); System.out.println("set集合是否为空:" + set.isEmpty()); set.add("aaa");
set.add("bbb");
set.add("ccc");
set.add("ddd");
set.add("eee");
set.add("aaa"); for (String element : set) {
System.out.println(element);
}
System.out.println("---------"); //只能通过值删除
set.remove("eee");
for (String element : set) {
System.out.println(element);
} //集合的长度
System.out.println("Set集合的长度:" + set.size()); //Iterator迭代器,遍历set
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next()); }
} }
  2、TreeSet实现类:不可重复的、是有序的(自然顺序,a-z、0-9)
package com.oop.ch07.test;

import java.util.*;

/*
* 练习TreeSet集合的使用:自然顺序
  TreeSet集合的大多数方法都和HashSet一样的
*/
public class TreeSetTest {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>();
set.add("aaa");
set.add("ccc");
set.add("bbb");
set.add("ddd");
set.add("eee");
set.add("aaa"); for (String element : set) {
System.out.println(element);
}
}
}
四、    Map集合:
  Map集合采用“键值对”的entry结构,每一个元素由key(键)和value(值)构成,可以通过指定key方便的获取value。
  1、 HashMap实现类:是无序的(Hash是一种随机算法),针对Key是不可重复的,若放相同的Key,
      新的entry会替换老的entry;针对value没有限制(可重复)。
  2、 TreeMap实现类:针对key是自然排序,不可重复,若key重复,新的entey会替换老的entry。针对value没有限制(可重复)。
package com.oop.ch07.test;

import java.util.Map.*;
import java.util.*;
import org.junit.Test;
import com.oop.ch07.Dept; /*
* 练习map集合的使用:HashMap、TreeMap
*/
public class MapTest {
/**
* 练习HashMap
*/
@Test
public void testHashMap() {
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("k1","k1的值");
map.put("k2","k2的值");
map.put("k3","k3的值");
map.put("k4","k4的值");
map.put("k3","k3的新值");
map.put("k5","k3的值"); //通过key获取该entry中的value
System.out.println(map.get("k3")); //entry的个数
System.out.println("entry的个数:" + map.size()); //map.keySet():将Map集合中所有entry的key都获取并放置到Set集合中
Set<Object> keySets = map.keySet();
for (Object key : keySets) {
//针对放置了Map集合中所有Key的Set集合进行遍历,可以取到Key值,再通过get(Object Key)方法获取到对应的value
System.out.println("键:" + key + ",值:" + map.get(key));
} //entrySet():将Map集合中的所有entry(key和Value)一次性取出来放到一个Set集合中,
//再通过entry的getKey和getValue方法,获取到Map集合中放置的Key和value
//Entry<Object, Object>:相当于一个object
System.out.println();
Set<Entry<Object, Object>> entrySet = map.entrySet();
for (Entry<Object, Object> entry : entrySet) {
System.out.println("键:" + entry.getKey() + ",值:" + entry.getValue());
} //containsKey(Object key):Map集合的Key中是否包含key,包含为true
System.out.println(map.containsKey("k2"));
//containsValue(Object value):Map集合的Value中是否包含value
System.out.println(map.containsValue("K2")); } /**
* 练习TreeMap
*/
@Test
public void testTreeMap() {
Map<Object, Object> map = new TreeMap<Object, Object>();
map.put("k1","k1的值");
map.put("k2","k2的值");
map.put("k3","k3的值");
map.put("k4","k4的值");
map.put("k3","k3的新值");
map.put("k5","k3的值"); //通过key获取该entry中的value
System.out.println(map.get("k3")); //entry的个数
System.out.println("entry的个数:" + map.size()); //map.keySet():将Map集合中所有entry的key都获取并放置到Set集合中
Set<Object> keySets = map.keySet();
for (Object key : keySets) {
//针对放置了Map集合中所有Key的Set集合进行遍历,可以取到Key值,再通过get(Object Key)方法获取到对应的value
System.out.println("键:" + key + ",值:" + map.get(key));
} //entrySet():将Map集合中的所有entry(key和Value)一次性取出来放到一个Set集合中,
//再通过entry的getKey和getValue方法,获取到Map集合中放置的Key和value
//Entry<Object, Object>:相当于一个object
System.out.println();
Set<Entry<Object, Object>> entrySet = map.entrySet();
for (Entry<Object, Object> entry : entrySet) {
System.out.println("键:" + entry.getKey() + ",值:" + entry.getValue());
} //containsKey(Object key):Map集合的Key中是否包含key,包含为true
System.out.println(map.containsKey("k2"));
//containsValue(Object value):Map集合的Value中是否包含value
System.out.println(map.containsValue("K2")); } @Test
/*
* 在HashMap中放实体
*/
public void testHashMapEntity() {
Map<String,Dept> deptMap = new HashMap<String, Dept>();
deptMap.put("dept1", new Dept("人事部","北京"));
deptMap.put("dept2", new Dept("财务部","上海"));
deptMap.put("dept3", new Dept("公关部","昆明"));
deptMap.put("dept4", new Dept("综合部","山东")); //打印一个value
System.out.println(deptMap.get("dept1")); //使用entrySet遍历Map集合
System.out.println("使用entrySet遍历Map集合");
for (Entry<String, Dept> map : deptMap.entrySet()) {
System.out.println(map);
} //使用keySet遍历集合
System.out.println("使用keySet遍历集合");
//Set<String> key = deptMap.keySet();
for (String map : deptMap.keySet()) {
System.out.println(map + "=" + deptMap.get(map));
}
}
}


实体类:
package com.oop.ch07;

/**
* 练习封装tb_dept表对应的实体类Dept 八种基本数据类型对应的有八种引用数据类型(包装数据类型),
* byte short int    long loat double   char     boolean
* Byte Short Integer Long Float Double   Character Boolean
*
*/
public class Dept {
private Integer deptNo; // 部门编号
private String dName; // 部门名称
private String loc; // 部门所在地
//setter、getter方法的区域:
public void setDeptNo(Integer deptNo) {
this.deptNo = deptNo;
}
public Integer getDeptNo() {
return deptNo;
} public void setDName(String dName) {
this.dName = dName;
}
public String getDName() {
return dName;
} public void setLoc(String loc) {
this.loc = loc;
}
public String getloc() {
return loc;
} //构造方法的区域:
//默认的构造方法,当手动写了一个带参的构造方法,默认的就会失效
public Dept() { }
//有参的构造方法
public Dept(Integer deptNo) {
this.deptNo = deptNo;
}
public Dept(String dName,String loc) {
this.dName = dName;
this.loc = loc;
}
public String method1() {
return null;
} /*
* 重写toString()方法,在Object类中就定义过该方法,一个类若重写了toString()方法
* 当输出该类的对象信息时,就会以toString方法的格式输出该类中“属性名 = 属性值”的格式,更方便我们观察对象的属性信息
* 此方法不需要手动调用,而是在输出对象时,JVM会自动调用
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Dept [deptNo=" + deptNo + ", dName=" + dName + ", loc=" + loc + "]";
}
}

五、    泛型:
  在集合框架中默认放置的数据都是Object类型(让集合可以存放任何类型的数据),但实际运用过程中通常需要将类型具体化,
  更利于代码的编写,因此Java提供了泛型来指定集合中放置数据的真实类型,以避免后期数据类型转换异常。

java oop第07章_集合框架的更多相关文章

  1. Java oop 第13章_多线程

    第13章_多线程 一.   多线程相关的概念:  程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念.   进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...

  2. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  3. java oop第06章_异常处理

    一. 异常的概念: 若程序都按我们事先设定的计划运行为正常执行,但通常会出现我们事先预料之外的其他情况,称为程序发生异常, 在java中会对一些可能出现异常的代码进行分类,达到尽量对可能发生的异常进行 ...

  4. Java oop第05章_多态、接口

    一. 为什么需要接口? Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口. 一个类只能继承一个父类,但可 ...

  5. java OOP第03章_继承、抽象类和抽象方法

    一. 为什么需要继承: 若多个类中都需要一些属性和方法,那么就可以将属性和方法抽取到一个父类中,需要的子类可以通过extends关键字去继承这个父类后拥有相应的属性和方法. 类.数组.方法----引用 ...

  6. Java OOP——第六章 框架集合

    1.集合框架包含的主要内容及彼此之间的关系: 图1:   集合框架:是为了表示和操作集合而统一规定的一种统一的标准体系结构.               包含三大块的内容:对外的接口.接口的是实现和对 ...

  7. Java之旅_高级教_集合框架

    摘自:http://www.runoob.com/java/java-collections.html Java 集合框架 早在Java2之前,java 就提供了特设类.比如:Dictionary,V ...

  8. JavaSE学习总结第15天_集合框架1

      15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...

  9. JavaSE学习总结第16天_集合框架2

      16.01 ArrayList存储字符串并遍历 ArrayList类概述:底层数据结构是数组,查询快,增删慢,线程不安全,效率高 ArrayList类是List 接口的大小可变数组的实现.实现了所 ...

随机推荐

  1. Installing GCC 简单方法

    Installing GCC This page is intended to offer guidance to avoid some common problems when installing ...

  2. 利用mysql数据库日志文件获得webshell

    查看配置 show variables like '%general%'; 开启日志功能 set GLOBAL general_log='ON'; 设置日志存储路径 SET GLOBAL genera ...

  3. 2019年Pandas官方用户调研

    import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline plt.rcP ...

  4. 第五记 JDBC

    了解JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(API:Application Program Inter ...

  5. 大型站点图片server架构的演进

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/dinglang_2009/article/details/31450731 在主流的Web站点中,图 ...

  6. (数据科学学习手札59)从抓取数据到生成shp文件并展示

    一.简介 shp格式的文件是地理信息领域最常见的文件格式之一,很好的结合了矢量数据与对应的标量数据,而在Python中我们可以使用pyshp来完成创建shp文件的过程,本文将从如何从高德地图获取矢量信 ...

  7. Spring入门(三)

    测试Spring Bean的自动化装配 方式一:使用配置文件方式启动组件扫描 准备一个接口 package soundsystem; public interface CompactDisc { vo ...

  8. 利用VUE-CLI脚手架搭建VUE项目

    前言 在学习完vue基础语法之后,学着利用vue-cli脚手架搭建一个项目,本篇随笔主要记录搭建的过程,供大家一起学习. 具体内容 搭建vue项目的准备工作 1.安装Nodejs.NPM以及VSCod ...

  9. nodejs mysql 连接数据库

    1.设计数据库 2.设计数据库表 3.下载MySQL模块 npm install --save mysql 4.编写代码 const mysql=require('mysql'); //1.连接 // ...

  10. Excel如何快速渲染百万级别的数据

    Excel主要经历1.查询2.渲染的方式 关于查询: 不同技术水平的人有不同的解决方案,目前我采用的是 1:多线程查询 2:一个异步后台线程每次查询100条便渲染,采用的“懒加载方式”,这样可以做到实 ...