黑马程序员——常用集合特点及其方法

本文深入探讨Java中集合框架的使用,包括Collection、List、Set、Map等接口及其实现类,如ArrayList、Vector、LinkedList、HashSet、LinkedHashSet、TreeSet、HashMap、TreeMap等。同时介绍了泛型、静态导入、可变参数以及常用工具类Collections的基本概念和方法。通过实例解析,帮助开发者更好地理解和应用Java集合框架。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

<pre name="code" class="java">	Collection
		|--List	有序,可重复
			|--ArrayList
				底层数据结构是数组,查询快,增删慢。
				线程不安全,效率高
			|--Vector
				底层数据结构是数组,查询快,增删慢。
				线程安全,效率低
			|--LinkedList
				底层数据结构是链表,查询慢,增删快。
				线程不安全,效率高
		|--Set	无序,唯一
			|--HashSet
				底层数据结构是哈希表。
				如何保证元素唯一性的呢?
					依赖两个方法:hashCode()和equals()
					开发中自动生成这两个方法即可
				|--LinkedHashSet
					底层数据结构是链表和哈希表
					由链表保证元素有序
					由哈希表保证元素唯一
			|--TreeSet
				底层数据结构是红黑树。
				如何保证元素排序的呢?
					自然排序
					比较器排序
				如何保证元素唯一性的呢?
					根据比较的返回值是否是0来决定

 
	Collection
	顶层接口,有两个主要的子接口:List(有序、可重复)和Set(无序,唯一)
	主要方法有:
		添加:
			boolean add(E e);
			boolean addAll(Collection c);
		删除:
			boolean remove(Object o);
			boolean removeAll(Collection c);
			void clear();
		判断:
			boolean contains(Object o);
			boolean containsAll(Collection c);
			boolean isEmpty();
		长度:
			int size();
		交集:
			boolean retainAll(Collection c);
		集合转数组:
			Object[] toArray();
		List
			特有功能
			void add(int index,E element);
			E remove(int index);
			E get(int index);
			E set(int index,E element);
			ListIterator listIterator();
			实现类:
				ArrayList
					底层数据结构是数组,查询快,增删慢;线程不安全,效率高
					无特有功能;
				Vector
					底层数据结构是数组,查询快,增删慢;线程安全,效率低
					特有功能已被取代<pre name="code" class="java">					特有功能已被取代
						public void addElement(E obj)
						public E elementAt(int index) 
						public Enumeration elements()
				LindedList
					底层数据结构是链表,查询慢,增删快;线程不安全,效率高
					特有功能:
						public void addFirst(E e);	addLast(E e);
						public E getFirst();	getLast();
						public E removeFirst();	removeLast();

 
 
		Set
			无特有功能
			实现类:
				HashSet
					底层数据结构是哈希表(元素是链表的数组),依赖于哈希值存储
					添加功能依赖于两个方法保证元素的唯一:
					int hashCode();		boolean equals(Object o);
				LinkedHashSet
					元素有序且唯一,链表保证有序,哈希表保证唯一。
				TreeSet
					底层数据结构是红黑树(是一种自平衡的二叉树)
					根据创建对象时使用的构造方法决定是自排序还是构造器排序
	Map
	双列集合接口,包含的元素是将键映射到值的对象,键不可重复,值可以重复
	键可以理解为是Set类型的集合,值可以理解为是List类型的集合
	集合的数据结构对键有效,与值无关
	主要方法有:
		V put(K key,V value);
		V remove(Object key);
		void clear();
		boolean containsKey(Object key);
		boolean containsValue(Object value);
		boolean isEmpty();
		int size();
		V get(Object key);
		Set<K> keySet();
		Collection<V> values();
		Set<Map.Entry<K,V>> entrySet();
	实现类:
		HashMap:键是哈希表结构,唯一,无序
		LinkedHashMap:Map接口的哈希表和链表实现,具有可预知的迭代顺序。
		TreeMap:键是红黑树结构,唯一,有序
到底使用那种集合
	单列还是双列
		单列:Collection
			元素重复吗?
				重复:List
					要安全吗?
						要:Vector
						不要:
							查询多:ArrayList
							增删多:LindedList
				不重复:Set
					有序吗?
						无序:HashSet
						有序:TreeSet
			如果只知道是单列,不知道其他的,就使用ArrayList
		双列:Map
			键有序吗?
				无序:HashMap
				有序:TreeMap
			如果不知道就用HashMap

Collections

	(1)是针对集合进行操作的工具类
	(2)面试题:Collection和Collections的区别
		A:Collection 是单列集合的顶层接口,有两个子接口List和Set
		B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
	(3)常见的几个小方法:
		A:public static <T> void sort(List<T> list)
		B:public static <T> int binarySearch(List<?> list,T key)
		C:public static <T> T max(Collection<?> coll)
		D:public static void reverse(List<?> list)
		E:public static void shuffle(List<?> list)

泛型

	(1)泛型概述
		是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的
		特殊的类型。
	(2)格式:
		<数据类型>
		注意:该数据类型只能是引用类型。
	(3)好处:
		A:把运行时期的问题提前到了编译期间
		B:避免了强制类型转换
		C:优化了程序设计,解决了黄色警告线问题,让程序更安全

静态导入

	(1)可以导入到方法级别的导入
	(2)格式:
		import static 包名....类名.方法名;
	(3)注意事项:
		A:方法必须是静态的
		B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。
			所以一般我们并不使用静态导入,但是一定要能够看懂。

可变参数

	(1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。
	(2)格式:
		修饰符 返回值类型 方法名(数据类型... 变量) {}
		
		注意:
			A:该变量其实是一个数组名
			B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
	(3)Arrays工具类的一个方法
		asList()把数组转成集合。
		注意:这个集合的长度不能改变。

在集合中常见的数据结构

	ArrayXxx:底层数据结构是数组,查询快,增删慢
	LinkedXxx:底层数据结构是链表,查询慢,增删快
	HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
	TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

### 黑马程序员 JavaSE 14.02 课程概述 黑马程序员提供的JavaSE 14.02版本教程涵盖了从基础到高级的各种主题,旨在帮助学员全面掌握Java编程技能。该系列课程不仅注重理论讲解,还强调实践操作,使学生能够在实际项目中灵活运用所学知识。 #### 主要内容覆盖范围 - **基础知识巩固** - 数据类型、运算符、流程控制语句等基本概念。 - **面向对象编程(OOP)** - 类与对象的概念理解;继承机制详解[^4]; - 接口的应用场景分析以及抽象类的作用说明。 - **异常处理机制** - 常见错误类型的识别及其解决方案介绍。 - **输入输出流(Input/Output Streams)** - 文件读写方法的学习及网络通信相关内容探讨。 - **多线程并发编程** - 并发模型的理解;同步锁的使用技巧分享。 - **集合框架(Collection Framework)** - List, Set, Map接口特性对比研究;常用实现类的功能特点解析。 - **泛型(Generics)** - 泛型语法结构剖析;通配符的实际应用场景举例。 - **Lambda表达式和Stream API** - Lambda表达式的简洁书写方式展示;Stream API的强大功能演示。 #### 开发环境搭建指导 针对新手开发者,在开始学习之前推荐先了解并配置好合适的开发工具: - 对于初学者而言,虽然可以直接通过命令行配合记事本来编写简单的Java程序来加深对语言本身的认识[^1], - 更高效的选择则是采用集成开发环境(IDE),比如Eclipse或IntelliJ IDEA,这些工具有助于提高编码效率并减少人为失误的可能性。 #### JVM工作原理简介 为了更好地理解和优化性能表现,课程还会深入浅出地解释JVM的工作过程——如何加载class文件、执行字节码指令集、管理内存空间等方面的知识点[^3]。 ```java // 示例代码片段:定义一个简单的Java应用程序入口 public class HelloWorld { public static void main(String[] args) { System.out.println("Welcome to Heima Programmer's Java SE Course!"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夸克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值