学java有必要学STL吗

如题,介绍一下stl。

Java 中所有的STL均继承自Collection类。所以Collection类的方法所有的子类均可使用:

ACM中常用的方法有

boolean add(Object obj)
boolean remove(Oblect obj)
boolean contains(Object obj)
void clear()
boolean isEmpty()
Iterator iterator()
int size()

另外Collections类中包含sort方法可以对Vector容器进行排序,但是Vector中的元素必须实现Comparable接口或自定义Comparator,详见Vector。

请注意Collections和Collection不一样,前者是接口后者是类。

Set

java 中的Set是一个抽象的类,因此我们不可以用Set直接定义实例,必须通过子类来定义实例。常见的子类有 HashSet , TreeSet等。
另外java中的所有容器的元素都只能是类的实例而不可以是基本数据类型。所以我们不能定义装有int的Set而是要把int改为Integer类。

HashSet
HashSet 中的元素需要实现hashCode()方法,以实现元素的比较
class P
{
int x, y;
int hashCode()
{
return x*100000 + y;
}
}
Set<P>st = new HashSet<P>();

遍历Set中的元素

1 迭代器
Iterator<P> it = st.iterator();
while(it.hasNext())P e=it.next();
2 枚举
for(P e : st)System.out.println(e.x+" "+e.y);

TreeSet
TreeSet 与HashSet不同的地方在于TreeSet中的元素要实现Comparable接口
值得注意的是 TreeSet与C++中的set很相似,遍历是会自动按照comparable定义的顺序进行
class P implements Comparable<P>
{
int x,y;
int compareTo(P e)
{
return x<e.x?-1:1;
}
}

C++中set有upper_bound(),lower_bound()方法和multiset,遗憾的是Java中 我暂时还没有看到

Map

Map 同Set一样包含HashMap和TreeMap 且如果遍历TreeMap会自动按照comparable规定的顺序进行
boolean containsKey(Object key)
boolean containsValue(Object value)
value get(Object key)
value put(Object key,Object value)
Map的一般用法

1.声明一个Map:

Map map = new HashMap();

2.向map中放值,注意: map是key-value的形式存放的,如:

map.put("sa","dd");

3.从map中取值:

String str = map.get("sa").toString,

结果是: str = "dd'

4.遍历一个map,从中取得key和value:

Map m= new HashMap();

for(Object obj : map.keySet()){

Object value = map.get(obj );

}
网上找的程序遍历map

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapTest {

private static Map<Integer, String> map=new HashMap<Integer,String>();
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-05
STL无论是从实用还是思想都值得学习。
但由于MS有意无意的忽略,导致VC中STL效率不好,而且MSDN中介绍也很少!
基本没有比较好的中文资料,学STL要看E文的了!
另外,STL应该是Generic Programming的典范,GP是否归于OOP当中,现在还没有定论。
第2个回答  2015-07-15
没有必要,STL是C++的库,java 里有自己专门的集合库。
第3个回答  2015-07-26
STL不是C++库吗
第4个回答  2008-08-24
stl ? jstl ?
相似回答