`
purple12
  • 浏览: 6849 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Java.集合框架及集合类

阅读更多

上一次给大家分享了一些数组和动态数组的概念,说到数组,不难想到容器,数组是一种最简单的容量固定的容器,后面我们又引出了可变容量容器-------动态数组,在今天这一讲里我们主要讲集合类和集合框架。集合框架是预定义在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集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    Java集合框架详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    Java集合框架常见面试题.pdf

    根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map接口两大分支。Collection接口主要包括List、Set以及Queue三个子接口...

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 19. 集合框架与数组的对比及概述.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 19. 集合框架与数组的对比及概述.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 20. 集合框架涉及到的API.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 20. 集合框架涉及到的API.avi

    java集合类线程安全.doc

    Java 集合类线程安全 Java 集合框架是由 Java 平台标准版 1.2 引入的通用数据结构与算法...通过对 Java 集合框架中的集合类进行线程安全性分析,可以帮助 Java 程序员在进行并发编程时更加高效地利用 Java 集合框架。

    11.集合框架001-Collection接口13-16

    它是Java集合框架的顶级接口,位于`java.util`包下。所有的集合类,无论是List、Set还是Queue,都直接或间接地继承自Collection接口。Collection接口定义了基本的集合操作,如添加元素(add),删除元素(remove),检查...

    java集合 框架 泛型

    首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些接口和类提供了存储、检索、遍历和修改元素的方法。例如,ArrayList是以动态数组为基础的列表实现,适合...

    java.util.ConcurrentModificationException 异常问题详解1

    在 Java 中,集合类如 ArrayList、LinkedList 等都可能会抛出这个异常。 在了解这个异常之前,我们需要了解 Iterator 的工作原理。Iterator 是 Java 集合框架中的一个接口,用于遍历集合中的元素。它提供了 hasNext...

    Java集合框架总结

    ### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...

    java集合框架图

    此外,还有五个抽象类以及多个实现类,它们共同构成了Java集合框架的基础。 #### 二、核心接口介绍 1. **`Collection`接口**: - 这是最基本的接口,所有其他集合接口都是它的子类。它代表了一组对象,其中可能...

    java集合框架全面进阶.pdf

    在Java集合框架的发展史上,JDK 1.2版本中引入的集合框架极大地改进了集合类的设计和实现,这个版本的集合框架广泛应用于Java 2平台。随着Java 2平台的发展,集合框架经历了多次更新和扩展,以满足不断增长的编程...

    Java集合框架学习笔记

    本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java 5引入的泛型特性。 首先,让我们了解一下`java.lang.Class`。`Class`类在Java中扮演着特殊的角色,它不仅是一个普通类,而且是用于获取...

    java.util包

    1. 集合框架:Java.util包是Java集合框架的基础,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些集合类为存储和操作对象提供了灵活的方式。例如,ArrayList实现了...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    JAVA学习Java集合框架.pptx

    Java集合框架提供了多种接口和实现类,帮助开发者更方便地处理数据。ArrayList和LinkedList是List的两个实现类,HashMap是Map的实现类。通过学习Java集合框架,可以更好地处理数据和解决实际问题。

Global site tag (gtag.js) - Google Analytics