读书人

java的一些非一般标示符

发布时间: 2011-12-25 23:21:20 作者: rapoo

java的一些特殊标示符
兄弟看java jdk帮助和java源代码时发现里面有些从来没用过的特殊符号。不解,那位前辈指点一下。
下面是java TreeSet的源码

public class TreeSet <E>
extends AbstractSet <E>
implements SortedSet <E> , Cloneable, java.io.Serializable
{
private transient SortedMap <E,Object> m; // The backing Map
private transient Set <E> keySet;// The keySet view of the backing Map

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();


private TreeSet(SortedMap <E,Object> m) {
this.m = m;
keySet = m.keySet();
}

public TreeSet() {
this(new TreeMap <E,Object> ());
}

public TreeSet(Comparator <? super E> c) {
this(new TreeMap <E,Object> (c));
}

public TreeSet(Collection <? extends E> c) {
this();
addAll(c);
}

public TreeSet(SortedSet <E> s) {
this(s.comparator());
addAll(s);
}
public Iterator <E> iterator() {
return keySet.iterator();
}

public int size() {
return m.size();
}
public boolean isEmpty() {
return m.isEmpty();
}

public boolean contains(Object o) {
return m.containsKey(o);
}

public boolean add(E o) {
return m.put(o, PRESENT)==null;
}

public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}

public void clear() {
m.clear();
}

public boolean addAll(Collection <? extends E> c) {


// Use linear-time version if applicable
if (m.size()==0 && c.size() > 0 &&
// FIXME(VFORCE) Work-around for bug in compiler
c instanceof SortedSet &&
m instanceof TreeMap) {
SortedSet <Map.Entry <E, Object> > set = (SortedSet <Map.Entry <E, Object> > ) (SortedSet) c;
TreeMap <E,Object> map = (TreeMap <E, Object> ) m;
Comparator <? super E> cc = (Comparator <E> ) set.comparator();
Comparator <? super E> mc = map.comparator();
if (cc==mc || (cc != null && cc.equals(mc))) {
map.addAllForTreeSet(set, PRESENT);
return true;
}
}
return super.addAll(c);
}

public SortedSet <E> subSet(E fromElement, E toElement) {
return new TreeSet <E> (m.subMap(fromElement, toElement));
}

public SortedSet <E> headSet(E toElement) {
return new TreeSet <E> (m.headMap(toElement));
}

public SortedSet <E> tailSet(E fromElement) {
return new TreeSet <E> (m.tailMap(fromElement));
}

public Comparator <? super E> comparator() {
return m.comparator();
}

public E first() {
return m.firstKey();
}

public E last() {
return m.lastKey();
}

public Object clone() {


TreeSet <E> clone = null;
try {
clone = (TreeSet <E> ) super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}

clone.m = new TreeMap <E,Object> (m);
clone.keySet = clone.m.keySet();

return clone;
}

private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
// Write out any hidden stuff
s.defaultWriteObject();

// Write out Comparator
s.writeObject(m.comparator());

// Write out size
s.writeInt(m.size());

// Write out all elements in the proper order.
for (Iterator i=m.keySet().iterator(); i.hasNext(); )
s.writeObject(i.next());
}

/**
* Reconstitute the <tt> TreeSet </tt> instance from a stream (that is,
* deserialize it).
*/
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
// Read in any hidden stuff
s.defaultReadObject();

// Read in Comparator
Comparator <E> c = (Comparator <E> ) s.readObject();

// Create backing TreeMap and keySet view
TreeMap <E,Object> tm;
if (c==null)
tm = new TreeMap <E,Object> ();
else
tm = new TreeMap <E,Object> (c);
m = tm;
keySet = m.keySet();

// Read in size
int size = s.readInt();

tm.readTreeSet(size, s, PRESENT);
}

private static final long serialVersionUID = -2479143000061671589L;


}

问题1:public class TreeSet <E> <E> 是什么意思
问题2:private transient SortedMap <E,Object> m; <E,Object> 是什么意思
问题3:public TreeSet(Collection <? extends E> c) <? extends E> 是什么意思



[解决办法]
E是type
<E,Object> 分别表示这个map的key value对类型
<? extends E> 字面理解是未知对象继承自E
[解决办法]
当模版理解好了,就是一个类,具体是什么类看你定义的时候用
[解决办法]
jdk1.5开始出现的 "泛型 "
和c++里的模板差不多
[解决办法]
E可以看成是Element的缩写
没什么特别意义的
你也可以用T,S,K什么的
[解决办法]
用范型,存的什么类型,取出来的就是什么类型,不用强制转换
如果用Object,取出的是Object,你要强制转换成你存的那个类型才行
[解决办法]
和C++的模板一啊
[解决办法]
一个模版类而已,我不这么写,因为我不会,设计类的高手可能这么些

读书人网 >J2SE开发

热点推荐