您的位置:首页 > 编程语言 > Java开发

实习笔记(2015-11-26)

2015-11-26 22:59 197 查看
这几天接手了同事的一个爬虫程序,需求是改成多线程,由于目标网站比较坑爹,有108种让你爬不下去的方法,所以虽然单线程他已经写完了,到我这种对java多线程丝毫无研究的小白手里,着实搞了几天也没搞定,这里先列出一些用到的对我来说新的知识点,有时间深入学习一下。(由于整个程序通过Maven建立项目,java为开发语言,1.8jre,通过hibernate连接数据库。由于本人编程新手,如下内容有错敬请指出纠正,谢谢)

1.Java解析Json利器——Gson

还记得前段时间用C#的CsQuery做爬虫的时候也解析过Json,用的好像是Json.net。Json这个数据格式是非常不错的,所以到了Java项目理所应当需要解析Json。这里的Json是N个ip代理,由于爬的网站封ip嘛...所以问了下同事有没有现成的方法,就找到了Google的Gson包。

怎么说,这个包里的序列与反序列Json的方法特NB,只要建一个类,然后创建一个Gson的对象,一句语句就能实现了。

Json->Class

Gson gson = new Gson();

List<Person> list = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType);

这里我的理解就是:我们会拿到一个String字符串,格式为Json,然后想提取里面的某些数据,那就先创建一个类(Person),然后用Gson的反序列化为一个List,List中的每一个元素都是一个对象。

Class->Json

Person p = new Person();

p.setName("Zhou");

p.setAge(21);

String str = gson.toJson(p);

懂了之前的反序列化,那Json的序列化也就是逆向操作而已。。

暂时对Gson的了解先到这里...

2.HashMap简单的操作

由于经常处理 key,value这种类型的数据,那么array、list感觉有点难办,所以这里用到的是类似于Python中的Dictionary——HashMap(刚查了下..Java里好像也有Dictionary)

这边由于经常需要查找HashMap中的值,遍历之类的操作就必不可少了。网上遍历一般用Iterator(迭代器)来做,但也许用Java1.8中的Stream 来并发是否更快呢?找个时间试试~

HashMap map = new HashMap();

Iterator ite = map.entrySet.iterator();

while(ite.hasNext())

{

     HashMap.entry entry = (HashMap.entry)ite.next();

     Object key = entry.getKey();

     Object value = entry.getValue();

}

这...我觉得好像不简单。把HashMap转为Iterator,然后遍历Iterator,再将Iterator中的每一个元素转成HashMap来输出...类型还是Object的,有点麻烦,是否能直接遍历HashMap呢?现在好像还没有发现...

当然HashMap的一些其他赋值啊(map.put(key, value)),通过key找value啊(map.get(key)),我这边就不多说了。但通过value找key好像只能遍历...

3.Java的Queue操作

队列嘛...在学数据结构的时候还是了解过的,当时好像用C++写作业的时候用到过...先进先出的属性就不多说了,直接写一些基本操作

在Java.util.Queue中,由于LinkedList类实现了Queue的接口,所以我们可以把LinkedList当Queue用

Queue<String> queue = new LinkedList<String>();

我这边也只了解了一点Queue的插入与删除操作。好像它有好几种插入与删除的方法,作用都不同。一般好像用offer()插入,poll()返回并删除元素,这两种方法失败会返回null。还有就是add()与remove()了,这两种网上说是错误会抛出异常,我还没测试过...

还有好几个新知识没罗列..讲的好像也都是些数据结构...嘛,自己比较菜,慢慢积累吧。先这样吧。Java的多线程、Java Stream、okHttp、Unirest
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java