java集合

hashset :不同步的,插入与读取顺序不一样,集合元素值可以为null,当hashset中存取元素时,会调用对象的hashcode方法得到对象的hashcode值,然后根据值查找元素,如果两个元素通过equals方法返回true但他们的hashcode方法不同也可以添加成功,所以hashset判断两个对象的标准是通过equals方法比较相等,并且两个对象的hashcode值也相等。再添加新类时注意重写hashcode与equals方法令相同元素这两种相等。

HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。为快速查找而设计的Set,我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。采用add方法时会进行hashcode判断有返回值true或者false

Linkedhashset:基于hashset来的,底层是链表,迭代遍历快,且顺序与存取的一致。因为linkedhashset本质也时hashset的一种,在插入删除要维护链表稍微慢一点

treeset:底层是二叉树,按给定的顺序排列,只能添加同一种对象。

1自然排序:将存入的类实现comparable接口重写比较方法

class R implements Comparable{
      int age;
      public R(int age){
    	  this.age=age;
      }
      public int getAge(){
    	  return this.age;
      }
	@Override
	public int compareTo(Object o) {
	     R r=(R)o;
		return this.age-r.age;
	}
	
}
class  test{
	public static void main(String[] args) {
		Set s=new TreeSet();
		R r1=new R(5);
		R r2=new R(3);
		R r3=new R(31);
		R r4=new R(8);
		s.add(r1);
		s.add(r2);
		s.add(r3);
		s.add(r4);
		for(Object r:s){//实现不知道什me类型
			R ra=(R)r;//进行强转
			System.out.println(ra.getAge());
		}
		
	
	}
	}

2定制排序,在treeset中写排序方法。

class R {
      int age;
      public R(int age){
    	  this.age=age;
      }
      public int getAge(){
    	  return this.age;
      }
}
class  test{
	public static void main(String[] args) {
		Set s=new TreeSet(new Comparator<R>() {//匿名内部类实现定制排序
			@Override
			public int compare(R o1, R o2) {
				return o1.age-o2.age;
			}		
		});
		R r1=new R(5);
		R r2=new R(3);
		R r3=new R(31);
		R r4=new R(8);
		s.add(r1);
		s.add(r2);
		s.add(r3);
		s.add(r4);
		for(Object r:s){
			R ra=(R)r;
			System.out.println(ra.getAge());
		}	
	}
	}

set集合都不是线程安全的,可以用collections控制集合类的方法进行同步

SortedSet s1=Collections.synchronizedSortedSet(new TreeSet());

List集合删除操作,本质是比较集合中的元素与要被删除的元素equals比较,如果传入list.remove(new A())A中恰好重写了equals方法返回固定true。所以导致删除一直有效。默认删除第一个。当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时采用LinkedList。LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。linkedlist用迭代器iterator遍历比较好,arrylist用get获取比较好。

arrylist与vector底层都是数组,vector线程安全的。

Map

从源码来看,java先实现了map然后将value置为null实现了set。

hashmap jdk7底层为entry数组,初始长度为16.在jkd8中底层问node[]数组,且底层为数组加链表加红黑树,更加方便查找。

hashtable与vector一样古老的类,线程安全的不允许null作为key与value,hashmap可以。其中key中的对象也要重写hashcode与equals方法。同样检测hashtable中是否存在某value的值时实际还是调用equals方法,与其他的任意一个其他的value值的equals方法比较。如果返回true则一样。

class A{
	@Override
	public boolean equals(Object obj) {
				return true;
	}
}
class  test{
	public static void main(String[] args) {
		Map m=new Hashtable();
		A a=new A();
		m.put("xxx",20);
		m.put("xxqx",25);
		m.put("dsa", a);
		System.out.println(m.containsValue(88));//true将a对象调用equals方法与任何对象比较返回true
		
	}
	}

HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。

get方法底层有getentry维护,直接通过key获得entry.getvalue。HashMap 实现了Serializable接口,因此它支持序列化。

 

内容概要:《绿色转型美丽乡村——汾渭平原地区低碳乡村案例集》由西安空气侠环保科技有限公司编写,北京市企业家环保基金会支持,聚焦汾渭平原地区乡村低碳发展的典型实践。报告梳理了国内外相关理论研究及政策背景,展示了中央与地方在低碳乡村发展方面的政策措施。通过五个典型案例,包括芮城县庄上村的“光储直柔”模式、铜川耀州区克坊村的“光伏+普惠金融”、浮山县臣南河村的循环经济模式、澄城县权家河村的“风光储一体化”以及麟游县紫石崖村的“光伏+生态养殖”,详细分析了这些案例的技术路线、项目成效、主要政策、典型经验和存在问题。报告总结了清洁能源在乡村低碳发展中的核心地位,强调了因地制宜发展策略的关键作用,并指出了多重效益综合追求的重要性。 适合人群:从事环保、农业、能源领域研究的专业人士,以及关注乡村低碳发展和可持续发展的政策制定者和社会学者。 使用场景及目标:①为全国其他地区开展乡村能源转型实践提供有益的借鉴;②助力推动我国乡村低碳发展,为实现碳达峰、碳中和目标贡献积极力量;③为政策制定者提供决策参考,促进乡村绿色转型和乡村振兴战略的实施。 其他说明:报告由多家单位参编,感谢北京市企业家环保基金会提供资金支持。文中内容及意见仅代表作者的个人观点,与北京市企业家环保基金会的立场或政策无关。报告期望为全国其他地区开展乡村能源转型实践提供有益的借鉴,助力推动我国乡村低碳发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值