学习-集合框架

  集合:装东西的容器;

  框架:为了打到某一目的或者实现某个功能,而预先设计好的一系列具有继承或实现关系的类与接口;

  Collection接口,常用的集合或是他的直接实现类,或是有间接关系;

  三种常用集合:

  一.List

  特点:a.线性,就是有序的意思,有下标,元素放入集合的顺序就是他存放元素的顺序;

     b.可以放入重复元素;

  1.ArrayList

  ArrayList在内存中依然是连续内存地址,这样做的优点是:查找元素效率高;往末尾添加元素效率高;

  List的另一个子类Vector的元素存放方式与ArrayList一样,所以常把他们拿来比较,ArrayList是线程不安全的但是效率高;Vector是线程安全的但是效率低.

  常用操作:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList array = new ArrayList();
		//增
		array.add(1000);
		array.add("hello");
		array.add("world");
		array.add(new Object());
		//获取集合中元素的数量
		int num = array.size();
		//删
		array.remove(1);
		//查
		Object obj = array.get(2);
		//改
		array.set(1, "helloworld");
	}

  2.LinkedList

  LinkedList在方法与效果上与ArrayList相同,不同的是元素的储存方式.LinkedList在内存是链式存储元素,集合的引用指向第一个元素,每个元素都有前后两个引用,前引用指向上一个元素,后引用指向下一个元素,第一个元素的前引用为null,最后一个的后引用为null;缺点是,在查找时,必须按顺序一个个的去找;优点是:内存利用率高,向中间添加数据方便.

  二.Set

  特点:放入的元素无序不重复;

  常用的Set是HashSet,他通过两个方法判断放入元素是否重复:1.两个对象的equals返回true表示内容相同;

                               2.两个对象的HashCode一致为相同;

  必须两个都不相同才能放入集合.

  常用方法:

public static void main(String[] args) {
		HashSet hs = new HashSet();
		//增
		hs.add(new ArrayList());
		hs.add("hello");
		//查看集合中元素个数
		int num = hs.size();
		//删
		hs.remove(1);
	}

  由于是无序存放所以没有下标的说法,没办法操作其中某个元素

  三.Map

  特点:元素以键值对的形式存入集合;一个键对应一个值;键和值都可以是任意自定义类型;每个键都是唯一的不能重复,值可以有重复.

  1.常用的Map是HashMap,他判断键是否相等的方式与HashSet一样

  常用方法:

  

		// TODO Auto-generated method stub
		/*
		 * Map集合--映射--元素是以键值对的方式,成对表示的。
		 * 键不能重复,但是值可以重复
		 * 键与值都可以是任意数据类型
		 *
		 */

		HashMap<Integer, Student> map = new HashMap<Integer, Student>();

		//增
		map.put(12901, new Student(12901,"zhang3",23));
		map.put(12902, new Student(12902,"li4",21));
		map.put(12903, new Student(12903,"wang5",24));

		//删
		map.remove(12902);

		//查
		Student stu = map.get(12901);
		System.out.println(stu);

		//改
		map.put(12901, new Student(12901,"zhang3",32));

		System.out.println(map.size());

		//得到map中所有的key
		Set<Integer> keySet = map.keySet();
		for(Integer key : keySet){
			System.out.println(key);
		}

		//得到map中所有的值
		Collection<Student> values = map.values();
		for(Student tmpStu : values){
			System.out.println(tmpStu);
		}

		//是否包含某个键
		System.out.println(map.containsKey(12904));
		//是否包含某个值
		System.out.println(map.containsValue(new Student(12901,"zhang3",32)));

   HashMap与HashTable的区别:a.HashMap不允许使用null做键,线程不安全;

                 b.HashTable允许其中一个键是null,线程安全;

  2.Properties-一个特殊的Map

  特点:a.是属于Map的集合类

     b.可以直接操作文件-属性文件(Properties文件)一种专属的文本文件.

 

public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * Properties---属于Map分支的一种集合类;
		 * 				可以操作一种专属格式的文本文件(属性文件,properties文件)
		 */

		Properties props = new Properties();
		//增
//		props.setProperty("J120", "J120-123456-10000.0");
//		props.setProperty("J121", "J121-123456-11000.0");
//		props.setProperty("J122", "J122-123456-12000.0");

		//取
//		String value = props.getProperty("J121");
//
//		//改
//		props.setProperty("J121", "J121-123456-11200.0");
//
//		//删除
//		props.remove("J121");
//
//		//同样拥有Map的其他常用方法
//		props.containsKey("J121");
//		Set<Object> allKey = props.keySet();
//		Collection<Object> allValues = props.values();
//		for(Object key : allKey){
//			String strKey = (String)key;
//		}

		//写文件---不能单独写入某一个键值对,只能全部写入
		//store方法两个参数:1、文件输出流,参数是文件的名字和位置;2、注释,可以不写那就传入null或空串
//		try {
//			props.store(new FileOutputStream("properties/user.data"), null);
//		} catch (FileNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}

		//读文件
		try {
			props.load(new FileInputStream("properties/user.data"));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Collection allValues = props.values();
		for(Object values : allValues){
			String strValue = (String)values;
			System.out.println(strValue);
		}
	}

  四.集合工具

  1.遍历:a.for-each循环

  

		// TODO Auto-generated method stub
		/*
		 * for-each循环专用(只能用作)对集合进行遍历(所谓遍历--指代把集合中的每个元素取出来,操作一次。);
		 * 支持数组、List、Set
		 */

		int[] array1 = new int[]{1,3,5,7,9};

//		for(int i = 0; i < array1.length; i++){
//			System.out.println(array1[i]);
//		}

//		for(int tmp : array1){
//			System.out.println(tmp);
//		}

		ArrayList<String> lst = new ArrayList<String>();
//		lst.add("hello");
//		lst.add("world");
//		lst.add("hell");
//
//		for(String str : lst){
//			System.out.println(str);
//		}

		HashSet<Integer> set = new HashSet<Integer>();
		set.add(100);
		set.add(120);
		set.add(102);
		set.add(200);
		set.add(122);

		for(int in : set){
			System.out.println(in);
		}

          b.迭代器(Iterator)

  支持遍历的集合:a.数组支持普通for循环,for-each循环;

          b.List支持普通for循环,for-each循环,迭代器;

          c.Set支持for-each循环,迭代器;

  2.集合工具类:Collections类,Arrays类

  

public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 1、addAll---一次往集合中放入多个元素
		ArrayList<String> lst1 = new ArrayList<String>();
		lst1.add("J129");
		lst1.add("J120");
		lst1.add("J121");

		ArrayList<String> lst2 = new ArrayList<String>();
		lst2.add("J124");
		lst2.add("J127");
		lst2.add("J128");

		Collections.addAll(lst2, lst1.get(0),lst1.get(1),lst1.get(2),"hello","world");

		//max\min---得到集合中最大的元素和最小的元素
		String max = Collections.max(lst1);
		String min = Collections.min(lst2);
		System.out.println(max);
		System.out.println(min);
		          //排序方法只支持List
		//reverse---把一个集合倒序排列,也称之为反转
		System.out.println("反转前=====================");
		for(String str : lst2){
			System.out.println(str);
		}
		Collections.reverse(lst2);
		System.out.println("反转后=====================");
		for(String str : lst2){
			System.out.println(str);
		}

		//sort---把集合排序
		Collections.sort(lst2);
		System.out.println("排序后=====================");
		for(String str : lst2){
			System.out.println(str);
		}
		//shuffle---随机混排
		Collections.shuffle(lst2);
		System.out.println("排序后=====================");
		for(String str : lst2){
			System.out.println(str);
		}

	}

  五.补充知识点:

  1.JDK1.5以后数组作为方法形参的新语法

public void test(){

		int[] array  = new int[5];
		array[0] = 1;

		testArray(array);
		testArray(1,2,3,4,5,6,7,8,9);
	}

	//JDK1.5之后用数组做参数的新语法
	public void testArray(int... array){
		System.out.println(array[0]);
		System.out.println(array.length);
	}

  2.比较器

    a.内部比较器-Compareable接口

    参与比较的类实现Compareable接口,重写比较方法,传入一个同类型对象,自定义当前对象与传入对象比较内容,得到当前对象与传入对象的位置差,为正则表示当前对象排在传入对象之后,为负则表示当前对象排在传入对象之前.

    b.外部比较器-Comparator接口

    需要新建一个专门用于比较的类实现Comparator接口,传入2个对象,自定义前对象与后对象比较内容,得到前对象与后对象的位置差,为正则表示前对象排在后对象之后,为负则表示前对象排在后对象之前;

  在外部比较器不参与时,元素比较使用内部比较器;当外部比较器参与比较则内部比较器失效.

时间: 2024-11-09 00:46:32

学习-集合框架的相关文章

Java学习----集合框架总结

集合框架总结: Collection接口: Set接口: HashSet//对象必须实现hashCode方法,元素没有顺序呢,效率比LinkedHashSet高 LinkedHashSet//是HashSet的扩展,支持规则集内元素的排序,按元素插入集合的顺序进行提取 TreeSet//保证集合中的元素是有序的,与HashSet相反 List接口: ArrayList LinkedList Vector Stack//派生于Vector,栈 Map接口: HashMap//效率高 LinkedH

java基础知识再学习--集合框架-对象的强、软、弱和虚引用

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/53092 本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. author: ZJ 07-12-1 Blog: [url]http://zhangjunhd.blog.51cto.com/[/url] 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序

第14章 集合框架(1)-List集合的各种类

1.概述 1.1.Java集合框架的由来 1.2.什么是集合框架? 1.3.为什么需要集合框架 1.4.常用的框架接口规范 2.Vector类 2.1.存储原理 2.2.构造方法 2.3.常用方法 3.Stack类 3.1.什么是栈 3.2.栈的构造方法和常用方法 4.ArrayList类 5.LinkedList类 5.1定义 5.2.常用方法 1.概述 1.1.Java集合框架的由来 刚开始的时候java只有Vetor,Stack,Hashtable这些同容器类用来保存大量的对象.容器类是可

Java集合框架——List接口

第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 List在Collection中充当着一个什么样的身份呢?--有序的 collection(也称为序列) 实现这个接口的用户以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素.与 set 不同,列表通常允许重复的元素. (2)List集

Java集合框架——Set接口

第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 Set可以理解为行为不同的Collection (一) 概述及功能 (1) 概述 Collection List -- 有序(存储顺序和取出顺序一致),可重复 Set -- 无序(存储顺序和取出顺序不一致),唯一 我们首先要清楚有序无序,到底是什么意思? 集合所说的序,是指元素存入集合的顺序,当元

Java集合框架学习笔记

本文为学习笔记,学习课程为慕课网Java入门第三季中的集合框架部分,若需要研究文中的代码,可前往下载.http://www.imooc.com/learn/110 1. List(Collection子接口) 1.1 实例化 List list = new ArrayList(); ??List是一个接口,不可直接实例化,通常情况下ArrayList实现类进行实例化. 1.2 增 1.2.1 add(obj) ??直接将obj对象加入List末位. 1.2.2 add(i, obj) ??将ob

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

黑马程序员——JAVA集合框架学习总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- www.itheima.com 要学好java的集合框架,必须掌握此图: Java集合框架很全面,从大的来说.它包括两种类型: 1.一种是以collection为根接口的集合. 2.另一种是由map为根接口的<key,value>的“图”. 而collection之下的set接口和list接口又有不同: 1.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制.

JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理.作为个人笔记无可厚非,但是并不利于他人学习.希望能通过这种比较“费劲”的讲解,帮助我自己.也帮助读者们更好地学习Java.掌握Java. 无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助.(关