List接口 && Set集合 && 哈希值 && Iterator接口 && 可变参数 && 增强for循环

List接口:

子接口
	 --> Vetor集合(数组结构,单线程),ArrayList集合(数组结构:查询快,增删慢),LinkLIst集合(链表结构:查询慢,增删快)
特点:
	1.有序的集合(存储和取出元素顺序相同)
	2.允许存储重复的元素
	3.有索引,可以使用普通的for循环遍历
特有方法:
	1、add(int index, Object obj)
 	 	在指定索引上,添加元素
 	2、remove(int index)
 	 	删除指定索引上的元素
 	3、set(int index, Object obj)
 	 	将索引为index的位置,修改为obj值
 	4、get(int index)
 	 	获取索引为index的值
LinkLIst特有方法:
	addFirst(Object obj)
 	addLast(Object obj)
 	removeFirst()
 	removeLast()
 	getFirst()
 	getLast()

三种遍历方式:

	for (int i=0;i<list.size();i++){
		String s = list.get(i);
		System.out.println(s);
	}
	Iterator<String> it = list.iterator();
	//多态  获取迭代器的实现类对象,并且把指针指向集合的-1索引
		while(it.hasNext()){
		String e = it.next();
		System.out.println(e);
	}
	for(String s : list){
		System.out.println(s);
	}//IDEA快捷键 list.for

Set集合

Set集合:子接口: --〉TreeSet集合,HashSet集合(哈希表结构:查询快)
		1.不允许有存储重复的集合
		2.没有索引(不能使用普通的for循环遍历)
		3.无序的集合(存储和取出元素的顺序有可能不一致)
	HashSet集合
		jdk1.8之前:哈希表=数组+链表(如果链表的长度超过8位,就会把链表转为红黑树,提高查询效率)
		jdk1.8之后:数组+红黑树(提高查询效率)
			数据结构:把元素进行分组(相同哈希值的元素一组)
			链表/红黑树:把相同哈希值的元素连接到一起
		set集合报错元素唯一:
			存储的元素(String,Integer,Person,Student),必须重写hashCode和equals方法
		LinkedHashSet //有序,不允许重复
			public class LinkedHashSet<E> extends HashSet<E> implements Set<E>
			特点:
				底层是一个哈希表(数组+链表/红黑树);多了一条链表(记录元素的存储顺序),保证元素有序

两种遍历方式:

		1.iterator迭代器,
		2.增强for,
		3.转成数组:toArray(),不带泛型的得转数组,得到的是Object类型的数组
		4.转成数组:toArray(T[] arr),带泛型的数组,得到的是T类型的数组
			数组遍历:
				String[] arr = new String[set.size()];
				set.toArray(arr);//返回字符串数组
				System.out.println(Arrays.toString(arr));

哈希值: 是一个十进制的整数,

由系统随机给出(就是对象的地址,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址)
在Object类中有一个方法,可以获取对象的哈希值
int hashCode()返回该对象的哈希值
hashCode方法源码:
	public native int hashCode();
	native: 代表该方法调用的是本地操作系统的方法
toString方法源码:
	return getClass().getName()+"@"+Integer.toHexString(hashCode());
String哈希值
	String类重写了Object类的hashCode方法
		String s1 = new String("abc");//96354
		String s2 = new String("abc");//96354
		System.out.println("重地".hashCode());//1179395
		System.out.println("通话".hashCode());//1179395

java.util.Iterator接口

java.util.Iterator接口:迭代器 有泛型 迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
两个常用方法
	boolean hasNext() 如果仍有元素可以迭代,则返回true
	E next()返回迭代的下一个元素,取出集合中的下一个元素,并使指针向后移动一位
	remove():删除迭代器对象正在迭代的那个对象

  	Trerator迭代器,是一个接口,我们无法直接使用,需要使用Irerator接口的实现类对象,获取方式比较特殊
	  	Connection接口有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
		Iterator<E> iterator():返回Collection 的元素上进行迭代器

	Iterator<String> it = coll.iterator();多态  获取迭代器的实现类对象,并且把指针指向集合的-1索引
		while(it.hasNext()){
			String e = it.next();
			System.out.println(e);
		}

	for(Iterator<String> it = coll.iterator().it.hasNext()){
			String e = it.next();
			System.out.println(e);
		}

并发修改异常

1、ConcurrentModificationException
并发      修改 	 	异常
2、原因:
 	在使用迭代器遍历集合的同时,使用了集合对象对集合元素进行增删
3、解决方式:只能针对List解决
 	1、集合遍历,集合增删:只能针对List解决
 	 	集合遍历:List的特有遍历方式
 	 	集合增删:add、remove
 	2、迭代器遍历,迭代器增删:只能针对List解决
 	 	迭代器遍历:获取迭代器,使用迭代器的hashNext和next方法遍历即可
 	 	迭代器删除:迭代器中有一个remove,可以删除当前迭代的元素
 	 	迭代器增加:迭代器中没有增加的方法,只能获取一个特殊的迭代器
4、列表迭代器:
 	1、ListIterator:List接口特有的迭代器所实现的接口
 	2、列表迭代器的获取: 	
 	 	在List集合中,有一个特有方法,listIterator()
 	3、使用:
 	 	 add(Object obj)
 	 	 	在当迭代的位置,添加元素
 	 	 hasPrevious()
 	 	 	判断是否有上一个元素
 	 	previous()
 	 	 	获取上一个元素
 	 	set(Object obj)
 	 	 	将当前迭代的位置,替换为obj元素

可变参数:是JDK1.5之后出现的新特性

注意事项:
	1.一个方法的参数列表,只能有一个可变列表
		public static void method(int...a,String...b){}//出错
	2.如果方法的参数有多个,那么可变参数必须写在参数列表末尾
		public static void method(String b,double c,int...a){}
可变参数的特殊写法:
	public static void methid(Object...obj){}
使用前提:
	当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
使用格式:定义方法时使用
	修饰符 返回值类型方法名(数据类型...变量名){}
可变参数的原理
	可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数传递的参数个数,可以是个0个(不传递),1,2...多个

增强for循环

增强for循环;内部原理和Iterator一致,是JDK1.5之后的特性  目标只能是Collection和数组
Collection<E> extens Iterator<E>: 所有的单列集合都可以使用增强for.
public interface Iterable<T>:实现这个楼口允许对象成为 "foreach" 语句的目标。

增强for循环:用来遍历集合数组格式:
格式:
for(集合/数组的数据类型 变量名:集含名/数姐名){
    sout(变量名);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值