学java有必要学STL吗

如题,介绍一下stl。... 如题,介绍一下stl。 展开
 我来答
陪你丶看日落
2015-08-04 · TA获得超过668个赞
知道小有建树答主
回答量:436
采纳率:46%
帮助的人:92.5万
展开全部
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>();
糖糖寳寳
推荐于2017-09-05 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:3942万
展开全部
STL无论是从实用还是思想都值得学习。
但由于MS有意无意的忽略,导致VC中STL效率不好,而且MSDN中介绍也很少!
基本没有比较好的中文资料,学STL要看E文的了!
另外,STL应该是Generic Programming的典范,GP是否归于OOP当中,现在还没有定论。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzy_lizhiyang
2015-07-15 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:113万
展开全部
没有必要,STL是C++的库,java 里有自己专门的集合库。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
五莲鲍爷
2015-07-26 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:106万
展开全部
STL不是C++库吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
innerhtml
2008-08-24 · TA获得超过145个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:0
展开全部
stl ? jstl ?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式