您好,欢迎访问一九零五行业门户网

Java集合之Set的图文代码介绍

set也是继承自collection,set也是集合的一种,同时set不允许重复的元素存在。set的实现类都是基于map来实现的,其中hashset是通过hashmap来实现的,treeset是通过treemap实现的。
set架构:
(1)set是继承于collection的接口,它是一个不允许重复元素的集合。
(2)abstractset是一个抽象类,继承了abstractcollection,abstractcollection实现了set中的绝大部分函数,为set的实现类提供了便利。
(3)hashset和treeset是set的两个实现类。hashset依赖于hashmap,实际上是通过hashmap来实现的,hashset中的元素是无序的。treeset依赖于treemap,实际上是通过treemap实现的,treeset中的元素是有序的。
基于java8的abstractcollection源码:
public abstract class abstractcollection<e> implements collection<e> { protected abstractcollection() {//构造函数 } public abstract iterator<e> iterator();//迭代器 public abstract int size();//集合大小 public boolean isempty() {//集合是否为空 return size() == 0; } public boolean contains(object o) {//判断是否包含某个元素,通过迭代遍历的方式 iterator<e> it = iterator(); if (o==null) { while (it.hasnext()) if (it.next()==null) return true; } else { while (it.hasnext()) if (o.equals(it.next())) return true; } return false; } public object[] toarray() {//生成数组 // estimate size of array; be prepared to see more or fewer elements object[] r = new object[size()]; iterator<e> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasnext()) // fewer elements than expected return arrays.copyof(r, i); r[i] = it.next(); } return it.hasnext() ? finishtoarray(r, it) : r; } @suppresswarnings("unchecked") public <t> t[] toarray(t[] a) {//泛型方式生成数组 // estimate size of array; be prepared to see more or fewer elements int size = size(); t[] r = a.length >= size ? a : (t[])java.lang.reflect.array .newinstance(a.getclass().getcomponenttype(), size); iterator<e> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasnext()) { // fewer elements than expected if (a == r) { r[i] = null; // null-terminate } else if (a.length < i) { return arrays.copyof(r, i); } else { system.arraycopy(r, 0, a, 0, i); if (a.length > i) { a[i] = null; } } return a; } r[i] = (t)it.next(); } // more elements than expected return it.hasnext() ? finishtoarray(r, it) : r; } private static final int max_array_size = integer.max_value - 8; @suppresswarnings("unchecked") private static <t> t[] finishtoarray(t[] r, iterator<?> it) { int i = r.length; while (it.hasnext()) { int cap = r.length; if (i == cap) { int newcap = cap + (cap >> 1) + 1; // overflow-conscious code if (newcap - max_array_size > 0) newcap = hugecapacity(cap + 1); r = arrays.copyof(r, newcap); } r[i++] = (t)it.next(); } // trim if overallocated return (i == r.length) ? r : arrays.copyof(r, i); } //对输入的mincapacity判断最大容量 private static int hugecapacity(int mincapacity) { if (mincapacity < 0) // overflow throw new outofmemoryerror ("required array size too large"); return (mincapacity > max_array_size) ? integer.max_value : max_array_size; } //添加对象 public boolean add(e e) { throw new unsupportedoperationexception(); } //通过迭代查找,删除对象 public boolean remove(object o) { iterator<e> it = iterator(); if (o==null) { while (it.hasnext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasnext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; } //判断集合c中的元素是否都存在 public boolean containsall(collection<?> c) { for (object e : c) if (!contains(e)) return false; return true; } //将集合c中的元素添加 public boolean addall(collection<? extends e> c) { boolean modified = false; for (e e : c) if (add(e)) modified = true; return modified; } //删除掉集合c中在此集合中的元素 public boolean removeall(collection<?> c) { objects.requirenonnull(c); boolean modified = false; iterator<?> it = iterator(); while (it.hasnext()) { if (c.contains(it.next())) { it.remove(); modified = true; } } return modified; } //删除掉此集合中在c中不存在的对象 public boolean retainall(collection<?> c) { objects.requirenonnull(c); boolean modified = false; iterator<e> it = iterator(); while (it.hasnext()) { if (!c.contains(it.next())) { it.remove(); modified = true; } } return modified; } //清空集合 public void clear() { iterator<e> it = iterator(); while (it.hasnext()) { it.next(); it.remove(); } } //通过stringbuilder生成string public string tostring() { iterator<e> it = iterator(); if (! it.hasnext()) return "[]"; stringbuilder sb = new stringbuilder(); sb.append('['); for (;;) { e e = it.next(); sb.append(e == this ? "(this collection)" : e); if (! it.hasnext()) return sb.append(']').tostring(); sb.append(',').append(' '); } } }
基于java8的abstractset源代码:
public abstract class abstractset<e> extends abstractcollection<e> implements set<e> { protected abstractset() { } public boolean equals(object o) {//判断两个集合是否相同 if (o == this) return true; if (!(o instanceof set)) return false; collection<?> c = (collection<?>) o; if (c.size() != size()) return false; try { return containsall(c); } catch (classcastexception unused) { return false; } catch (nullpointerexception unused) { return false; } } //计算hashcode public int hashcode() { int h = 0; iterator<e> i = iterator(); while (i.hasnext()) { e obj = i.next(); if (obj != null) h += obj.hashcode(); } return h; } //删除此集合中与c中相同的对象 public boolean removeall(collection<?> c) { objects.requirenonnull(c); boolean modified = false; if (size() > c.size()) { for (iterator<?> i = c.iterator(); i.hasnext(); ) modified |= remove(i.next()); } else { for (iterator<?> i = iterator(); i.hasnext(); ) { if (c.contains(i.next())) { i.remove(); modified = true; } } } return modified; } }
基于java8的sortset源码:
sortedset<> set<> { comparator<? > ()sortedset<> (fromelementtoelement)sortedset<> (toelement)sortedset<> (fromelement)()()spliterator<> () { spliterators.iteratorspliterator<>( spliterator.distinct | spliterator.sorted | spliterator.ordered) { comparator<? > () { sortedset..comparator()} }} }
基于java8的navigableset源码:
navigableset<> sortedset<> { (e)(e)(e)(e)()()iterator<> ()navigableset<> ()iterator<> ()navigableset<> (fromelementfrominclusivetoelementtoinclusive)navigableset<> (toelementinclusive)navigableset<> (fromelementinclusive)sortedset<> (fromelementtoelement)sortedset<> (toelement)sortedset<> (fromelement)}
基于java8的set源码:
public interface set<e> extends collection<e> { int size(); //大小 boolean isempty();//是否为空 boolean contains(object o); //是否包含某个对象 iterator<e> iterator(); //生成迭代器 object[] toarray(); //返回object数组 <t> t[] toarray(t[] a); //返回泛型数组 boolean add(e e); //向set中添加元素 boolean remove(object o); //从set中删除某个元素 boolean containsall(collection<?> c); //某个collection是否都包含在此lset中 boolean addall(collection<? extends e> c); //将某个collection追加到此set中 boolean retainall(collection<?> c); //删除不存在于collection中的set中的元素 boolean removeall(collection<?> c); //删除包含在此collection中的元素 void clear(); //清空set boolean equals(object o);//判断两个set是否相同 int hashcode(); //计算set的hashcode @override default spliterator<e> spliterator() { return spliterators.spliterator(this, spliterator.distinct); } }
以上就是java集合之set的图文代码介绍的详细内容。
其它类似信息

推荐信息