`

java集合

阅读更多
List特点:
1. 允许有重复的元素
2. 可以精确控制元素放置的顺序

List主要方法:
add(Object o)
add(int index, Object o)
get(int index)
set(int index, Object o)

Set特点:
1. 元素不能重复
2. 没有顺序

常见Set实现类:
HashSet: 使用对象的hashCode作为对象的存放位置
TreeSet: 实现SortedSet接口,可以对插入的对象进行排序,底层是树结构
LinkedHashSet: 内部使用链表维护其元素,特点是遍历它的元素顺序与存储时候的顺序一致,遍历较快

为确保具有等价关系的两个对象不被保存到HashSet中,必须重新equals()和hashCode方法
Set set = new Set()
set.add(new Animal("Cat"));
set.add(new Animal("Cat"));
set.size();   // 2

Map主要方法:
Set keySet()
Collection values()
Set entrySet()

Iterator接口:Collection的iterator()方法返回对象

循环中删除Collection元素:
List list = new ArrayList();
list.add("c");
list.add("a");
list.add("f");
list.add("d");

for (int i = 0; i < list.size(); i++) {
	String s = list.gte(i)
	if (s.equals("a") || s.equals("f")) {
		list.remove(s);
	}
}

list.size(); // 3

// 在循环中删除元素,通过Iterator中的remove()方法可以正确删除
for (Iterator it = list.iteraror(); it.hasNext();) {
	String s = it.next();
	if (s.equals("a") || s.equals("f")) {
		it.remove();
	}
}

// 下面的做法也是错误的,不允许对原始数据进行修改
for (Iterator it = list.iteraror(); it.hasNext();) {
	String s = it.next();
	if (s.equals("a") || s.equals("f")) {
		list.remove(s); // ConcurrentModificationException
	}
}

排序:
Collections.sort(List<T> list)
Collections.sort(List<T> list, Comparator<? super T> c)

Arrays.sort(T[] a)
Arrays.void sort(T[] a, Comparator<? super T> c)

1. Comparable接口:
   实现public int comparaTo(Object o)
   集合内部重写comparaTo方法排序
   一个类实现Comparable接口,则之间调用Collections或Arrays的sort方法,类的实例之间可以进行排序操作

public class Student implements Comparable<Object> {

	private int id;

	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public int compareTo(Object obj) {
		return this.id - ((Student)obj).getId();
	}

	@Override
	public boolean equals(Object obj) {
		return this.id == ((Student)obj).getId();
	}
	
	public static void main(String[] args) {
		Student stu1 = new Student();
		stu1.setId(3);
		stu1.setName("c");
		
		Student stu2 = new Student();
		stu2.setId(1);
		stu2.setName("c++");
		
		Student stu3 = new Student();
		stu3.setId(2);
		stu3.setName("java");
		
		List<Student> stus = new ArrayList<Student>();
		stus.add(stu1);
		stus.add(stu2);
		stus.add(stu3);
		
		System.out.println("Before sort: ");
		for (Student stu : stus) {
			System.out.println(stu.getId() + ", " + stu.getName());
		}
		
		Collections.sort(stus);
		
		System.out.println("\nAfter sort: ");
		for (Student stu : stus) {
			System.out.println(stu.getId() + ", " + stu.getName());
		}
	}
}

2. Comparator接口
   1. 独立的排序算法接口
   2. 类的设计师未考虑到排序,未实现Comparable接口,可实现Comparator进行排序

public class Student2 {
	
	private int id;

	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public static void main(String[] args) {
		Student2 stu1 = new Student2();
		stu1.setId(3);
		stu1.setName("c");
		
		Student2 stu2 = new Student2();
		stu2.setId(1);
		stu2.setName("c++");
		
		Student2 stu3 = new Student2();
		stu3.setId(2);
		stu3.setName("java");
		
		List<Student2> stus = new ArrayList<Student2>();
		stus.add(stu1);
		stus.add(stu2);
		stus.add(stu3);
		
		System.out.println("Before sort: ");
		for (Student2 stu : stus) {
			System.out.println(stu.getId() + ", " + stu.getName());
		}
		
		Collections.sort(stus, new Comparator<Object>() {
			public int compare(Object o1, Object o2) {
				return ((Student2)o1).getId() -  ((Student2)o2).getId();
			}
		});
		
		System.out.println("\nAfter sort: ");
		for (Student2 stu : stus) {
			System.out.println(stu.getId() + ", " + stu.getName());
		}
	}
}

HashSet和HashMap:
1. 数据存入规则
   a. 都使用数组来存放数据
   b. HashSet根据存入对象的hashCode来确定对象存放到数组的那个位置
   c. HashMap根据存入key的hashCode来确定key-value(Entry)存储到数组那个位置
   d. 如果hashCode经过一定运算得到一个存储位置后,在该位置上已经有对象存在,则判断两个对象是否等价(equals),如果等价则替换,否则将新对象链接到旧对象之后
2. 对象读取规则
   a. 根据要取出的对象(key)的hashCode来获取对象存储在数组中的具体位置
   b. 根据存入规则可知,在这个位置上可能存在一个或多个对象,所以会依次判断这个位置的若干个对象。判断规则:第一,这个对象的hashCode要与取出的对象的hashCode相等;第二,这个对象要等价(equals)要取出的对象;

选择集合:
1. ArrayXXX, 访问速度快,末端添加快
2. LinkedXXX, 中间插入、删除数据块
3. HashXXX, 读取数据极快,变量比较慢
4. TreeXXX, 需要排序时使用,遍历较快

 

分享到:
评论

相关推荐

    java集合思维导图

    Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...

    java 集合

    本文将深入探讨Java集合框架的基础知识,包括接口、类、以及它们在实际开发中的应用。 首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据...

    java 集合练习题

    在这个“java集合练习题”中,我们主要关注如何使用Java集合框架来处理数据,特别是对于学生信息的存储、排序和输出。以下是对这个练习题的详细解析: 1. **集合框架简介**: Java集合框架是Java API的一部分,它...

    Java集合思维导图.xmind.zip

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效的数据结构和算法,使得开发者可以方便地存储和管理对象。这份"Java集合思维导图.xmind.zip"压缩包文件,显然旨在帮助学习者深入理解Java集合框架的...

    java集合知识大全

    ### Java集合知识大全 #### 一、集合概述 在Java编程语言中,集合是一组用于存储其他对象的对象。集合框架提供了多种数据结构,用于管理不同类型的数据。这些数据结构包括列表(List)、集(Set)、映射(Map)等,每种...

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

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

    Java集合排序及java集合类详解.pdf

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...

    java 集合分组与排序

    Java集合框架中的`List`接口和数组(Array)是两种常用的数据结构,它们在处理数据时各有优势。下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这...

    实验七:Java集合与泛型

    Java集合框架是Java编程语言中用于存储和管理对象的核心组件,它包括了各种接口和类,为处理数据提供了丰富的选择。在本次实验中,我们深入学习了Java集合框架中的两个主要部分:List接口和Map接口,以及它们的主要...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    Java集合框架总结

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

    java集合类详解(set list ArrayList等java集合类详述)

    Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...

    实验05 Java集合.doc

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...

    java集合框架的使用。集合的运算

    Java集合框架是Java编程语言中一个非常重要的组成部分,它为开发者提供了存储和操作对象的统一接口和类。这个框架使得处理各种数据结构变得更加方便和高效。在这个“java集合框架的使用”主题中,我们将深入探讨如何...

    一个讲解很清晰的Java集合框架PPT

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组接口和类,用于高效地存储、管理和操作数据。这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合...

    Java集合详解,详细讲解java的集合类

    Java集合框架是Java编程语言中的核心部分,它提供了一种高效、灵活的方式来组织和操作对象的集合。在Java中,集合主要分为两大类:Collection和Map。本文将深入讲解Java集合类,特别是Collection接口和其下的List、...

    Java集合整体讲解

    Java集合整体讲解,其中包含了Collection,Map,Iterator和一些工具类,以及集合整体大框架

    深入Java集合学习系列

    Java集合框架是Java编程语言中的核心组件之一,它为存储、管理和操作对象提供了一套高效且灵活的工具。本系列深入讲解了Java集合框架中的重要组成部分,包括HashMap、ArrayList、LinkedHashMap、HashSet以及...

Global site tag (gtag.js) - Google Analytics