HashMap排序题

public class Test1 {
	public static void main(String[] args) {
		/*一直一个Hashmap<integer,User>的集合,写一个方式实现map的排序功能,
		 * 该方法的返回值与传入的参数均为Hashmap<integer,User>
		 * 要求对hashmap中的元素进行倒叙排列,排序时key与value的值不许拆开
		 * */
		Map<Integer,User>map=new HashMap<>();
		map.put(1, new User("tom",12));
		map.put(2, new User("jerry",22));
		map.put(3, new User("jack",25));
            //强转,是为了调用Collections类的方法
		Set<Entry<Integer, User>> entrySet = map.entrySet();
				
		List<Entry<Integer,User>> list=new ArrayList<>(entrySet);
		Collections.sort(list, new Comparator<Entry<Integer,User>>() {

			@Override
			public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
				// TODO Auto-generated method stub
				
				return o1.getValue().getAge()-o2.getValue().getAge();
			}
		});
            //再按照顺序将集合填充到linkedHashMap中
		LinkedHashMap<Integer, User>link=new LinkedHashMap<>();
		for (Entry<Integer, User> entry : list) {
			link.put(entry.getKey(), entry.getValue());
		}
		System.out.println(link);
	}
}

2、关于collections类的方法:

static <T> boolean 
 addAll(Collection<? super T> c, T... elements) 
          将所有指定元素添加到指定 collection 中。 

注意,后面的参数是集合的构成元素的类型,不是集合,zhuyi

代码:

	@Test
	public void test5(){
		List<User>list3=new ArrayList<>();
		User[]arr=new User[]{new User("tom",14),new User("jerry",13)};
		Collections.addAll(list3, arr);
		System.out.println(list);
		
	}
这里注意上下两种addAll的用法,
@Test
	public void test5(){
		List<User>list=new ArrayList<>();
		list.add(new User("tom",14));
		list.add(new User("jerry",13));
		List<User>list1=new ArrayList<>();
		list1.add(new User("jack",12));
		List<User>list3=new ArrayList<>();
		list3.addAll(list);
		list3.addAll(list1);
		System.out.println(list3);
	}
  输出结果为:[User [name=tom, age=14], User [name=jerry, age=13], User [name=jack, age=12]]

 
sort(List<T> list, Comparator<? super T> c)

          根据指定比较器产生的顺序对指定列表进行排序。

sort(List<T> list)
          根据元素的自然顺序 对指定列表按升序进行排序。(是根据元素的自然顺序进行排序,这里我理解为基本数据类型)

  

@Test
	public void test3(){
		List<User>list=new ArrayList<>();
		list.add(new User("tom",14));
		list.add(new User("jerry",13));
		list.add(new User("jack",12));
     此三行没有实际意义,测试比较器的返回值
	//	UserComparor c = new UserComparor();
	//	int compare = c.compare(new User("tom",13), new User("jerry",13));
	//	System.out.println(compare);
		Collections.sort(list,c);
		
		System.out.println(list);
	}
	
	static class UserComparor implements Comparator{


		@Override
		public int compare(Object o1, Object o2) {
			// TODO Auto-generated method stub
			User u1=(User) o1;
			User u2=(User) o2;
		return new Integer(u1.getAge()).compareTo( new Integer(u2.getAge()));
			//return u1.getAge()-u2.getAge();
		}

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值