博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 集合(重要)
阅读量:3948 次
发布时间:2019-05-24

本文共 6104 字,大约阅读时间需要 20 分钟。

集合

什么是集合?有什么用?

集合实际上就是一个容器,可以用来容纳其他类型的数据。

1.1集合为什么说在开发中使用的较多?

集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库中有10条记录,那么假设把这10条记录查询出来,在Java程序中会将10条数据封装成10个Java对象,然后将10个Java对象放到某一个集合中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。

1.2 集合存储什么

集合不能直接存储基本数据类型,另外集合也不能直接存储Java对象,集合当中存储的都是Java对象的内存地址(或者说集合中存储的是引用)

注意:集合在Java中本身就是一个容器,是一个对象,集合中任何时候存储的都是“引用”

在这里插入图片描述

1.3不同的集合,底层会对应不同的数据结构

在Java中每一个不同的集合,底层会对应不同的数据结构,往往在不同的集合中存储元素,等于将数据放到了不同的数据结构中。(数据存储的结构就是数据结构)

使用不同的集合等于使用了不同的数据结构。
例如:
new ArrayList(); 创建一个集合,底层是数组
new LinkedList(); 创建一个集合对象,底层是链表
new TreeSet();创建一个集合对象,底层是二叉树

1.4 集合在Java JDK中哪个包下?

Java.util. * ; (所有的集合类和集合接口都在Java.util包下)

1.5集合的继承结构图

集合继承结构图 ---- Collectiion部分在这里插入图片描述

集合继承结构 ------ Map部分

在这里插入图片描述
总结:
ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程是安全的,效率较低,使用较少
HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合的key部分了
TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了
HashMap:底层是哈希表
Hashtable:底层也是哈希表,只不过线程是安全的,效率较低,使用较少
Properties:是线程安全的,并且key和value只能存储字符串String
TreeMap:底层是二叉树,TreeMap集合的key可以自动按照大小顺序排序

1.6 Collection接口中常用的方法

注意:借口是抽象的,无法实例化

在这里插入图片描述

在这里插入图片描述

import java.util.ArrayList;import java.util.Collection;public class Test {
public static void main(String[] args) {
Collection c = new ArrayList(); //Collection c = new LinkedList(); c.add(10000); //自动装箱,实际上是放进去了一个对象的内存地址,Integer x = new Integer(10000); c.add(new Object()); c.add(true); //都是自动装箱 System.out.println("集合中元素的个数:" + c.size()); //3 //清空集合 c.clear(); System.out.println("集合中元素的个数:" + c.size()); //0 //再向集合中添加元素 c.add("java"); c.add("c"); c.add("钢铁侠"); c.add(666); c.add(new Student()); //判断集合中是否包含 "钢铁侠" boolean flag =c.contains("钢铁侠"); System.out.println(flag); //true System.out.println(c.contains("java")); //true //删除集合中的某个元素 c.remove(666); //如果集合中有相同的元素,则本语句只能删除其中的一个元素 System.out.println(c); // [java, c, 钢铁侠] //判断集合是否为空 System.out.println(c.isEmpty()); //false //将集合转换成数组 Object[] objects = c.toArray(); for (Object o : objects) {
System.out.println(o); } }}class Student{
}

1.7迭代器Iterator

迭代器遍历集合:

迭代器是一个对象,迭代器对象有三个方法

import java.util.Collection;import java.util.HashSet;import java.util.Iterator;public class CollectionTest {
public static void main(String[] args) {
//以下遍历方式/迭代方式,是所有Collection的通用的一种方式 //在Map集合中不能使用,在所有的Collection以及子类中使用 Collection c = new HashSet(); //无序不可重复 c.add("Jay"); c.add("lee hom"); c.add(10000); c.add(new Object()); //第一步:获取集合对象的迭代器对象Iterator Iterator it = c.iterator(); /* 以下两个方法是迭代器对象Iterator中的方法; boolean hasNext() 如果仍有元素可以迭代,则返回true Object next() 返回迭代的下一个元素 */ //第二步:遍历集合 while (it.hasNext()){
Object obj = it.next(); System.out.println(obj); } }}

注意:contains方法是用来判断集合中是否包含某个元素的方法,它在底层实现是调用了equals方法进行比对,equals方法方法返回true,就表示包含这个元素。

import java.util.ArrayList;import java.util.Collection;public class CollectionTest02 {
public static void main(String[] args) {
Collection c = new ArrayList(); User u1 = new User("jack"); c.add(u1); User u2 = new User("jack"); System.out.println(c.contains(u2)); //假如User类没有重写equals方法,结果会是false,因为他会调用Object类的equals方法 //当user类重写equals方法时,结果是true,比较的是那么值 }}class User{
private String name; public User(){
} public User(String name) {
this.name = name; } public boolean equals(Object o){
if (o == null || !(o instanceof User)) return false; if(o == this) return true; User u = (User)o; return u.name.equals(this.name); }}

存放在一个集合中的类型,一定要重写equals方法

集合元素的remove()方法

重点:当集合的结构发生改变时,迭代器必须重新获取,否则会出现异常。
重点:在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素
重点:在迭代元素的过程中,一定要使用Iterator的remove()方法删除元素时,因为这样会自动更新迭代器,并且更新集合(即删除集合中的元素)

1.8 List集合

List集合:List接口是Collection 接口的子接口

List集合存储元素的特点:有序可重复
有序:LIst集合中的所有元素都有下标,从0开始,依次递增
可重复:可以存储相同的元素

List 接口下面主要有两个实现 ArrayList 和 LinkedList,他们都是有顺序的,也就是放进去

是什么顺序,取出来还是什么顺序,也就是基于线性存储,可以看作是一个可变数组
ArrayList:查询数据比较快,添加和删除数据比较慢(基于可变数组)
LinkedList:查询数据比较慢,添加和删除数据比较快(基于链表数据结构)
List集合通过下标进行遍历

import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ListTest {
public static void main(String[] args) {
List myList = new ArrayList(); myList.add("A"); myList.add("B"); myList.add("C"); myList.add("D"); System.out.println(myList); //[A, B, C, D] myList.add(1, "K"); //迭代 Iterator it = myList.iterator(); while (it.hasNext()){
Object object = it.next(); System.out.println(object); } //根据下标获取元素 Object firstObj = myList.get(0); //A System.out.println(firstObj); for (int i = 0; i < myList.size(); i++){
Object o = myList.get(i); System.out.println(o); } //获取指定对象第一次出现处的索引 System.out.println(myList.indexOf("K")); // 1 //获取指定对象的最后一次出现处的索引 System.out.println(myList.lastIndexOf("C"));// 3 //删除指定下标的元素 myList.remove(0); // 删除下标为0的元素A System.out.println(myList); // [K, B, C, D] //修改指定位置的元素 myList.set(2, "Java"); System.out.println(myList); // [K, B, Java, D] }}

ArrayList的三种构造方法:

mport java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.List;public class ArrayListTest {
public static void main(String[] args) {
//默认初始化容量为10 List myList1 = new ArrayList(); //指定初始化容量为50 List myList2 = new ArrayList(50); //创建一个HashSet集合 Collection c = new HashSet(); c.add(111); c.add(222); c.add(333); c.add(444); //通过这个构造方法就可以贾昂HashSet集合转换为List集合 List myList3 = new ArrayList(c); for (int i = 0; i < myList3.size(); i++){
System.out.println(myList3.get(i)); } }}

在这里插入图片描述

转载地址:http://aeqwi.baihongyu.com/

你可能感兴趣的文章
Android:绘制自定义视图
查看>>
Android开发:一些有用的库(第一部分)
查看>>
Android 默认暗码
查看>>
Android 系列 1.3了解Android版本
查看>>
Android 系列 6.28使用正确的复数格式化
查看>>
Android 系列 6.29创建在两个活动之间显示的加载屏幕
查看>>
Android的Gradle技巧 1.2配置SDK版本和其他默认值
查看>>
Android的Gradle技巧 1.3从命令行执行Gradle构建
查看>>
Android的Gradle技巧 1.4从Android Studio执行Gradle构建
查看>>
Android的Gradle技巧 1.5添加Java库依赖关系
查看>>
Android的Gradle技巧 1.6使用Android Studio添加库依赖关系
查看>>
Android的Gradle技巧 1.7配置存储库
查看>>
android Collections 排序,
查看>>
Android的Gradle技巧 2.1设置项目属性
查看>>
Android的Gradle技巧 2.2将应用程序从Eclipse ADT移植到Android Studio
查看>>
Android的Gradle技巧 2.3从Eclipse移植应用程序ADT使用Eclipse
查看>>
昂山素季 Aung San Suu Kyi
查看>>
AI 人工智能第一课 从贝叶斯定理开始
查看>>
朴素贝叶斯python实现
查看>>
Logistic回归原理及公式推导
查看>>