集合类

Collection:单值保存最大的父接口。	
	list:允许重复,元素有序(动态数组)。
		1.ArrayList
		2.vector
		3.ArrayList和vector区别:
		     ArrayList采用异步处理方式,性能更高,非线程安全。
		     vector采用同步处理方式,性能相对较低,但线程安全。
		4.ArrayList 常用方法:
			add(Object obj)  
			void add(int index,Object obj):在指定的索引位置index添加元素obj.
			Object get(int index):获取指定索引的元素.
			Object remove(int index):删除指定索引的元素.
			Object set(int index,Object obj):设置指定索引位置的元素位obj.
			int indexOf(Object obj):返回 obj 在集合中第一次出现的位置,如果没有,返回-1.
			int lastIndexOf(Object obj):返回 obj 在集合中最后一次出现的位置,如果没有,返回-1.
			List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex结束的 左闭右开 的List.
	set:无序,不允许重复。
		HashSet:散列(无序)的方式保存集合数据。
		TreeSet:排序存放。
	HashSet:
  		1.无序:无序 != 随机,指的是元素在底层储存顺序是无序的.
  		2.不可重复:当像set添加重复元素时,后面的元素不能添加进去.
  			说明:要求添加进 set元素所在类必须重写equals和hashcode方法.
	LinkerHashSet:
	       1.使用链表维护了我们添加进集合中的顺序,导致我们遍历集合元素时是按照添加进去的顺序遍历的!
	       2.也是按照hashCode值来决定元素的储存位置的,同时维护了元素的次序.
	       3.LinkerHashSet的性能略低于hashSet,但在迭代访问set里面的元素时却有很好的性能.
	       4.同样LinkerHashSet里面不允许有重复的元素.
	TreeSet:
	  		1.向TreeSet添加的元素必须是同一个类的.
	 		2.可以按照添加进集合的指定顺序遍历,比如,string,包装类,默认从小到大排序.
	 		3.当向TreeSet中添加自定义类时,有两种排序方法:
	 			1).自然排序:要求定义的类实现java.lang.ComparableTo(Object obj)接口并重写compareTo()抽象方法.
	 			2).定制排序:
					
		public void treeSet2(){

		//创建一个实现comparator接口的类对象

		Comparator com = new Comparator(){

			//向TreeSet中添加Student对象,在此compare中指明按照Student哪个属性排序

			@Override

			public int compare(Object o1, Object o2) {

				if(o1 instanceof Student && o2 instanceof Student){

					Student s1 = (Student)o1;

					Student s2 = (Student)o2;

					int i = s1.getAge().compareTo(s2.getAge());

					//当age相同时,按照name排序

					if(i == 0){

						return s1.getName().compareTo(s2.getName());
					}

					return i ;
				}

				return 	0;
			}

		};

		//将此对象作为形参传给 TreeSet 构造器

		TreeSet set = new TreeSet(com);

		//添加元素

		set.add(new Student("AA",15));

		set.add(new Student("DD",52));

		set.add(new Student("GG",15));

		set.add(new Student("MM",22));

		for (Object i : set) {

			System.out.println(i);

		}
	}

 
	4.向TreeSet中添加元素时首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的该属性值相同,但是程序会认为这两个对象是相同的进而,后一个对象不能添加进来.
 
 
 

Map:具有映射关系 "key - value" 的集合。
	1.HashMap:
	 	1.key 是用set存放的不可重复,value是用collection存放的,可重复,一个key-value对,是一个Entry,所有Entry是用set存放的
	 	2.向HashMap 中添加元素会调用key所在类的equals()方法,,判断两个元素是否相同,后添加的元素会替换掉先前的元素
	2.Hashtable:古老的实现类,线程安全,不建议使用,但是常用他的子类Properties来处理属性文件,键和值都是String类型的.

        public void test2() throws FileNotFoundException, IOException{
		Properties pro = new Properties();
		pro.load(new FileInputStream(new File("db.properties")));
		String user = pro.getProperty("user");
		String password = pro.getProperty("password");
		System.out.println(user+"  "+password);
	}


	3.LinkedHashMap:使用链表维护添加进Map中顺序,故遍历Map时是按照添加进去的顺序遍历的.
	4.HashMap 和 Hashtable 的区别:
		HashMap: 采用异步处理方式,性能更高;非线程安全‘允许将key或value设置为null。
		Hashtable:采用同步处理方式,性能相对较低;线程安全;不允许出现null,否则出现指向异常。
 
 
集合遍历
	1.迭代器:
		Collection coll = new ArrayList();
		coll.add(...);
		Iterator it = coll.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	2.增强 for 循环遍历集合 foreach:
		Collection coll = new ArrayList();
		coll.add(...);
		for(Object i:coll){
			System.out.println(i);
		}

       3.Map遍历方式:

            
                //方式一:
		Set set1 = map.keySet();
		System.out.println("key--value对:");
		for (Object object : set1) {
			System.out.println(object+"-->"+map.get(object));
		}
		//方式二:
		Set set2 = map.entrySet();
		for (Object obj : set2) {
			Map.Entry obj1 = (Map.Entry)obj;
			System.out.println(obj1);
		}


Collections:对Collection和Map操作的工具类,里面包含很多对集合操作的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值