上一次给大家分享了一些数组和动态数组的概念,说到数组,不难想到容器,数组是一种最简单的容量固定的容器,后面我们又引出了可变容量容器-------动态数组,在今天这一讲里我们主要讲集合类和集合框架。集合框架是预定义在java.util包中的一类数据结构。
集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的,数组用来存放基本类型的数据,而集合用来存放对象的引用。常用的集合有List集合(列表),Set集合和Map集合(映射),其中List与Set继承了Collection接口。
1.List:是有序的Collection,常用List实现类是:
ArrayList类
LinkedList类
Stack(栈)
Vector(向量)
1.1. ArrayList:数组序列:有序的,可重复的,长度可变的,有下标的数据结构。
优点:因为地址连续,一旦数据存储好了,查询操作效率比较高。
缺点:因为地址连续,插入和删除操作效率比较低。不是线程同步的。
例1:班上有20位同学,学号是从1001~1020,从班上抽出1个一等奖,2个二等奖,5个三等奖,8个安慰奖,
所有获奖的人不能重复。
import java.util.*; public class prize { public static void main(String []args){ ArrayList list1=new ArrayList(); for(int i=0;i<20;i++){ list1.add(2001+i); } //创建随机数对象 Random rd=new Random(); //抽取一等奖 int index=rd.nextInt(list1.size());//随机一个下标 Object obj=list1.remove(index); System.out.println("一等奖是:"+obj); //将抽到的数据移除; for(int i=0;i<2;i++){ int index1=rd.nextInt(list1.size()); Object obj1=list1.remove(index1); System.out.println("二等奖是:"+obj1); } for(int i=0;i<5;i++){ int index2=rd.nextInt(list1.size()); Object obj2=list1.remove(index2); System.out.println("三等奖是:"+obj2); } for(int i=0;i<8;i++){ int index3=rd.nextInt(list1.size()); Object obj3=list1.remove(index3); System.out.println("安慰奖是:"+obj3); } }
运行结果:
一等奖是:2012 二等奖是:2010 二等奖是:2014 三等奖是:2002 三等奖是:2004 三等奖是:2020 三等奖是:2001 三等奖是:2006 安慰奖是:2016 安慰奖是:2003 安慰奖是:2017 安慰奖是:2018 安慰奖是:2007 安慰奖是:2015 安慰奖是:2005 安慰奖是:2009
1.2. LinkedList:链表,链式序列, 有序的,可重复的,长度可变的,有下标,地址任意,各个数据之间通过引用关联
优势:由于地址是任意的,非常适合进行插入和删除的操作。
缺点:查询性能比较低。
例2.为LinkedList列表添加元素,并选择移除元素。
public class LinkedListDemo { public static void main(String[] args) { // 创建链表对象 LinkedList<String> list = new LinkedList<String>(); // 加入元素 list.add("元素一"); list.offer("元素二"); list.addLast("元素三"); list.offerLast("元素四"); list.addFirst("元素五"); list.add(0, "元素六"); list.remove(3); for(int i=0;i<list.size();i++){ String str = list.get(i); System.out.println(str); }
运行结果:
元素六 元素五 元素一 元素三 元素四
1.3. 向量Vector:Vector和ArraryList都是大小可变数组的实现,使用方法与ArraryList一样。
区别:ArraryList不是同步的
Vector是同步的,在多线程中一般采用Vector。
栈 Stack : 后进先出,最先放入的数据在栈的底部,最后放的数据在栈的底部, 每次取数据只能取到栈顶的数据.其中Stack是Vector的子类。
例3.
public class StackDemo { public static void main(String[] args) { //创建一个栈对象 Stack<String> stack = new Stack<String>(); //将数据压入栈 stack.push("张三"); stack.push("李四"); stack.push("王五"); //查看栈顶的对象 String str = stack.peek(); System.out.println(str); //获取并移除栈顶对象 将数据弹出栈 String str2 = stack.pop(); System.out.println(str2); String str3 = stack.pop(); System.out.println(str3); } } 运行结果:
王五 王五 李四
2. 集合 :Set:无重复的Collection.必须使用迭代器才能获取数据。
常用的Set实现类:
HashSet:无序的,不可重复的,长度可变的
TreeSet:根据的内容的自然顺序(阿斯克码)进行排序。
例4. 创建一个HashSet集合,并获取数据。
import java.util.*; public class Setdome { public static void main (String[]args){ HashSet set=new HashSet(); set.add("a张三"); set.add("a李四"); set.add("a王五"); //取出元素 //1.将set中的数据放入迭代器,并返回迭代器; Iterator iter=set.iterator(); //2.开始迭代 while(iter.hasNext()){ Object obj=iter.next(); System.out.println(obj); } //加强版的迭代器 // for(Object obj:set){ // System.out.println(obj); // } }
运行结果:
a王五 a李四 a张三
例5. 有一个数组,String [] tst={"小六子",“小顺子”,“张三丰”,“小六子”,“周芷若”,“赵敏”,“张三丰”,“周芷若”,“谢逊”,“伯通”};去掉重复名字在进行排序。
package com.zjx.List; import java.util.*; public class SetDemo1 { public static void main(String[]args){ //创建数组 TreeSet tst=new TreeSet(); //添加数据 tst.add("小六子"); tst.add("小顺子"); tst.add("张三丰"); tst.add("小六子"); tst.add("周芷若"); tst.add("赵敏"); tst.add("张三丰"); tst.add("周芷若"); tst.add("谢逊"); tst.add("伯通"); //方法一 Iterator iter=tst.iterator(); while(iter.hasNext()){ Object obj=iter.next(); System.out.println(obj); } } }
运行结果:
伯通 周芷若 小六子 小顺子 张三丰 谢逊 赵敏
3.映射:Map:将键映射到值得一种结构,键是一个Set,键不能重复,每个键都对应一个值。
常用的Map实现类:
HashMap:键是一个HashSet,k是一个HashSet
TreeMap: 键是一个TreeSet, k是一个TreeSet
所有的k不能重复,每个k都对应一个Value
如果在加入额外数据的时候,出现相同的key,则替换掉原来的Value
例6.创建一个HashMap类,添加数据,并获取数据
import java.util.*; public class HashMapDemo { public static void main(String[]args){ //创建HashMap对象 HashMap<Integer,String> map=new HashMap<Integer,String>(); map.put(1011, "张三"); map.put(1012, "李四"); map.put(1013, "王五"); map.put(1014, "赵六"); //取出数据 //1.取出的k Set set= map.keySet(); Iterator iter=set.iterator(); while( iter.hasNext()){ Object key =iter.next(); String value=map.get(key); System.out.println(key+""+value); } } }
运行结果:
1011张三 1012李四 1013王五 1014赵六
例7.String str =“abbbccccdddffffgg”,统计这个字符串中每个字符出现的次数,其中Map, K:字符,V:出现的次数
import java.util.*; public class mapdemo { public static void main(String []args){ HashMap<Character,Integer> map= new HashMap<Character,Integer>(); String str="abbbccccdddffffgg"; for(int i=0;i<str.length();i++){ char c=str.charAt(i); boolean b=map.containsKey(c); if(b){ int value =map.get(c); value++; map.put(c, value); }else { map.put(c, 1); } } Set<Character> set=map.keySet(); Iterator<Character> iter=set.iterator(); while (iter.hasNext()){ char key=iter.next(); int value=map.get(key); System.out.println(key+"出现:"+value+"次"); } } }
运行结果:
f出现:4次 g出现:2次 d出现:3次 b出现:3次 c出现:4次 a出现:1次
相关推荐
集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...
根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map接口两大分支。Collection接口主要包括List、Set以及Queue三个子接口...
计算机后端-Java-Java核心基础-第23章 枚举类与注解 19. 集合框架与数组的对比及概述.avi
计算机后端-Java-Java核心基础-第23章 枚举类与注解 20. 集合框架涉及到的API.avi
Java 集合类线程安全 Java 集合框架是由 Java 平台标准版 1.2 引入的通用数据结构与算法...通过对 Java 集合框架中的集合类进行线程安全性分析,可以帮助 Java 程序员在进行并发编程时更加高效地利用 Java 集合框架。
它是Java集合框架的顶级接口,位于`java.util`包下。所有的集合类,无论是List、Set还是Queue,都直接或间接地继承自Collection接口。Collection接口定义了基本的集合操作,如添加元素(add),删除元素(remove),检查...
首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些接口和类提供了存储、检索、遍历和修改元素的方法。例如,ArrayList是以动态数组为基础的列表实现,适合...
在 Java 中,集合类如 ArrayList、LinkedList 等都可能会抛出这个异常。 在了解这个异常之前,我们需要了解 Iterator 的工作原理。Iterator 是 Java 集合框架中的一个接口,用于遍历集合中的元素。它提供了 hasNext...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
此外,还有五个抽象类以及多个实现类,它们共同构成了Java集合框架的基础。 #### 二、核心接口介绍 1. **`Collection`接口**: - 这是最基本的接口,所有其他集合接口都是它的子类。它代表了一组对象,其中可能...
在Java集合框架的发展史上,JDK 1.2版本中引入的集合框架极大地改进了集合类的设计和实现,这个版本的集合框架广泛应用于Java 2平台。随着Java 2平台的发展,集合框架经历了多次更新和扩展,以满足不断增长的编程...
本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java 5引入的泛型特性。 首先,让我们了解一下`java.lang.Class`。`Class`类在Java中扮演着特殊的角色,它不仅是一个普通类,而且是用于获取...
1. 集合框架:Java.util包是Java集合框架的基础,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些集合类为存储和操作对象提供了灵活的方式。例如,ArrayList实现了...
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
Java集合框架提供了多种接口和实现类,帮助开发者更方便地处理数据。ArrayList和LinkedList是List的两个实现类,HashMap是Map的实现类。通过学习Java集合框架,可以更好地处理数据和解决实际问题。