集合

集合和数组的区别

集合和数组都是"容器",存储元素!
  1)长度的区别
  		数组的长度:固定的!
  		集合的长度:可变的!
  
  2)存储数据类型的区别
  		数组:可以存储基本数据类型,也可以存储引用数据类型
  				int[]	String[]  Student[]
  		集合:只能存储引用数据类型 --->jdk5以后新特性: 泛型<>
   3)存储元素的区别
  		数组:只能存储同一种类型的元素
  				举例: 水杯中"纯净水"
  
  		集合:可以存储任意类型的元素(类型:引用类型)
  				举例:
  						白酒兑雪碧

==和equals的区别?

==:可以连接基本数据类型(数据值是否相同),也可以连接引用类型(比较的是地址值是否相同)
	equals():属于Object类中,默认比较的是两个对象地址值是否相同,重写之后,比较是内容是否相同

Collection集合

基本功能:
	添加功能:
	boolen add(Object e):将任何数据类型添加到集合中
	删除功能:
	void clear();暴力删除
	boolen remove(Object o):移除指定的元素
	判断功能:
	boolen contains(Object o):判断是否包含指定的元素
	boolen isEmpty():判断集合是否为空,如果为空,则返回true;
Collection高级功能:
	boolean addAll(Collection c):添加一个集合中所有元素:添加所有元素
	boolean containsAll(Collection c):包含所有(包含一个算包含还是包含所有?)包含所有元素算包含,返回true
	boolean removeAll(Collection c):删除所有 (删除一个还是删除所有算是删除?)只要集合中一个元素被包含,将这个元素从c1删除掉,则返回true
	boolean retainAll(Collection c):一个集合对另一个集合取交集 
        //boolean真是含义:
        A集合对集合去交集B集合,将交集的元素给A集合,boolean表达的是A集合是否发生变化,A集合变化true,A集合没有变化false
	转换功能:
	Object[] toArray():将集合转换成对象数组
	Iterator iterator():Collection集合的迭代器(集合的遍历方式)
        返回值是接口,需要返回的是该接口的子实现类对象

Collection集合的迭代器遍历集合的方式

迭代器的本质:
	实现了Iterator接口中的hasNext()和next()的内部类(Itr);
	ArrayList中有一个内部类Itr
迭代器的使用以及它的注意事项:
	1.next()获取当前集合的元素(),不能使用多次,使用一次即可
	2.能使用for循环:不推荐使用(因为以后集合中的元素不知道)

final,finalize,finally的区别

final:状态修饰符,最终的,无法更改的
		修饰类,类不能被继承
		修饰变量,此时变量是一个常量
		修饰成员方法,该方法不能重写!
		 
finalize:是一个方法Object类中方法
	可以将没有更多引用对象被收掉-----和System类中gc():手动开启垃圾回收器  
	(jvm自动开启一个垃圾回收线程),调用gc()----执行finalize()方法
finally:是异常处理的一部分,用于释放资源,finally代码肯定会执行,特殊情况:在执行到finally之前jvm退出了 system.exit(0);

泛型<引用类型>

什么是泛型:
	格式:
		<数据类型:引用数据类型>
	集合为了迎合数组的特点,在创建数组的时候,将类型定义了,来保证集合中的元素类型一致
泛型的好处:
	1.避免了强制类型转换
	2.将运行时期异常提前到了编译时期
	3.解决了黄的警告线的问题
	4.提高了程序的安全性
	
泛型定义在类上,在方法上,接口使用的方式:
	1.将泛型定义在类上,方法和形参要保持和泛型类型一致
		格式:
			class Show<T>{}
	2.经泛型定义在方法上
		格式:
			public <T> void show(T t)
	3.将泛型定义在接口上
		格式:
			interface Inter<T>{}
泛型的应用:
	在集合中应用居多,可以类上,在方法上,接口上!

泛型的高级通配符:
	<?>当前Object类型/任意java类型
	<? extends E>:向下限定:E类型以及它的子类
	<? super E>:向上限定:E类型以及它的父类
	

Collection集合的子接口:List

List集合特点:元素重复,并且有序(存储和取出一致)
遍历:
	1.Object[] toArray()
	2.Iterator interator
特有功能:
	添加功能
		void add(int index,Object element):在指定位置处添加元素
	删除功能:
		Object remove(int index):删除对应角标的元素
	列表迭代器:ListIterator<E> listIterator();专有遍历方式
		底层实现:是通过ArrayList里面的成员内部类Iterator接口中的hasNext()和next()的内部类(Itr);
		正向遍历:
		Boolean hasNext();判断是否有下一个元素
		Object next();获取下一元素
		逆向遍历:前提条件:先有正向遍历
		boolean  hasPrevious();判断是否有上一个元素
		Object previous();获取前一个元素
	get(int index):通过角标获取集合的元素+size():普通for遍历方式

Collection集合的子接口:set

增强for循环:JDK5以后的新特性

注意事项:
	增强for主要用在集合中,数组一般使用的时候普通for 
	
作用:是替代迭代器使用,数组一般使用的时候普通for 
前提条件:
	1.要使用增强for循环的话,必须保证该集合不能为null.否则就会出现空指针
	

面试题List三个自实现类的特点

ArrayList
	特点:底层数据结构是可变数组结构:查询快,增删慢
	线程角度:线程不安全的类---不同步的---执行效率高!
	单线程程序中,通常没有告诉使用什么集合的时候采用ArrayList集合
Vector
	底层数据数组结构(对象数组):查询快.增删慢
    线程角度:线程安全的类----同步的----执行效率低
    多线程程序中要考虑安全问题,使用Vector
    	
   
LinkeList
底层数据数组结构(对象数组):查询慢.增删快
线程角度:线程不安全的类---不同步的---执行效率高!
	特有功能:可以模拟栈结构:先进后出
	 线程安全的类:
    	StringBuffer/Vector

Vector

add (Object e):传统的添加功能
特有功能
	add(int index,E element);插入元素
	Enumeration<Object> element():z此接口和Iterator功能重复
		该接口有两个方法
		boolean hasMoreElement();判断是否有下一个元素
		Object nextElement();获取下一个元素
	elementAt(int index);通过角标获取指定的元素
	elementAt()+size();Vector的普通for遍历方式
应用场景:
	IO流:合并流SequenceIuputStream 可以将多个文件内容读出来复制到指定的文件中

LinkeList

应用场景:
	网站中 记录用户浏览过商品足迹(Web技术Cookie/)
特有功能:
	addFirst():将该元素添加到列表的开头
	addLast():将元素添加到列表的末位
	

HashSet集合存储自定义对象如何去重

不重复的,能够保证元素唯一,不能保证迭代顺序恒久不变
HashSet<Student>
	HashSet的添加功能add---->HashMap集合put方法
			hashcode()和equals方法
	对于自定义对象所在的类必须重写	hashcode()和equals方法
	HashSet<String>

TreeSet集合

由于TreeSet属于Set集合(本身保证元素唯一,不重复的元素!),还可以将元素按照自然顺序排序
本质是基于TreeMap的底层实现
有两种排序方式
	自然排序:public TreeSet():无参构造默认自然排序
	选择器排序:public TreeSet(Comparator<? super E> comparator):有参构造
	TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() 	{

			@Override
			public int compare(Student s1, Student s2) {
				//主要条件: 学生年龄的从大到小排序
				//s1---->this
				//s2---->s
				int num = s2.getAge() - s1.getAge() ;
				
				//学生年龄相同,比较姓名是否一样
				int num2 = (num==0) ? 											(s1.getName().compareTo(s2.getName())):  num ;
				return num2; 
			}
			
		}) ;
	

TreeMap集合

构造方法:
	public TreeMap():默认的自然顺序排序
	要求当前自定义类型需要实现Comparable接口,重写comparesTo方法
	public TreeMap(Comparator<? super K> comparator):是一种比较器排序(推荐)
	方式1:自定义一个类实现Comparator接口中 的compare(T t1,T t2)方法
	方式2:通过接口匿名内部类实现

Map和Collection集合的区别

Map<K key,V value>集合:双列集合,键映射到值的对象 ,键必须保证唯一,可以看成是一个(夫妻对)
  					遍历方式和Collection集合遍历方式不同
Collection<E>集合:
  		单列集合:只能存储一种引用类型,里面的set集合依赖于Map集合的实现 (理解为:光棍)
  			HashSet---->HashMap里面put方法
   			TreeSet---->TreeMap里面的put方法  
   

Map集合

 高级功能:
 	方式1:(推荐的方式:Map常用的方式)
 	Set<K> keySet():获取所有的键的集合
 	V get(Object key):通过键获取对应的值
 	方式2遍历
 	Set<Map.Entry<K,V>> entrySet():获取当前Map集合中所有的键值对对象
 	K getKey() :通过键值对对象获取键
 	V getValue():通过键值对对象获取值

HashMap集合

HashMap<K,V>是Map集合的子实现类,里面哈希表结构,保证(键唯一)
Map集合只只针对键有效
HashMap<Integer,String>键:Integer
HashMap<String,Student> :键:String
HashMap<Student,String>:键是自定义对象
对于Map存储的键如果是自定义对象:该自定义对象的所在类必须重写Object:equals()和hashCode()
 		会依赖于HashMap的put方法
 			hash()---->依赖于hashCode():算出每一个对象哈希码值一样
 			putValue()---->equals()方法:哈希码值一样,还有比较每一个成员信息是否相同!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值