Set、Map集合的区别

Set、Map集合的区别,第1张

Map和Set的 *** 作:增、删、判断、取出。
add和put的不同:

Set是单列集合,添加相同的元素,所以add方法只添加一个进去。Map的put方法如果添加了多个键相同的元素,则会用最后添加的值来覆盖之前的值,而这个键是最先添加的那个,并每天有被覆盖这一说。

凡是遇到hash,hashmap或者hashset,底层数据结构都是哈西表,存储数据的时候一样,都是先判断当前哈西值和已添加元素的哈希值是否相同,如果不相同,就存数据,不然就继续判断equals方法,若返回true就不存,返回false就存。所以元素都要复写一下hashCode()和equals()方法。
注意:判断元素是否存在以及删除 *** 作,依赖于这两个方法,这就是哈希表的特性。(ArrayList只依赖equals方法)

而遇到Tree开头的,TreeSet 和TreeMap,底层都是二叉树,存储数据遵循小的在左大的在右的原则,每个数下面最多只能有两个分支,新添加进去的数据依次往下比。若存的多了,会自动折中查找,所以这种数据结构的效率是比较高的。

Tree类型的查重:

比较器,对于不具有自然顺序的类型,比如一个Student类

(1)让这个类具备可比性

让Student类实现Comparable这个接口,然后重写里面的compareTo()方法, 返回值为0是保证唯一性的依据 :

(2)让将要添加这个类的对象的集合比如Set,具有可比性

自定义一个比较器MyCompare,实现Comparato这个接口,并把newMyCompare()当作参数传进Set这个类当中。

重写Comparator里面的compare()方法,这个方法里面有两个参数O1和O2,比较这两个对象的toString()值。比如下面:

public int compare(Object o1, Object o2) {

Book b1 = (Book)o1;

Book b2 = (Book)o2;

return b1getDate()toString() compareTo (b2getDate()toString());

}

两种比较器,重写的方法都是int类型。所以Tree类型存储数据只看相比的结果:正、负、0。0决定存不存,保证唯一性,正负决定存储的顺序。

注意: 在定义student这个类的时候,最好把hashCode()和equals()都重写一下(还有toString(),然后让这个类实现comparable接口或者自定一个比较器。这样一来,student既可以存进hashset里面又可以存进TreeSet里面。

TreeSet的方法:

E ceiling(E e) 返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null。

first() 返回此 set 中当前第一个(最低)元素

floor(E e) 返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。

HashMap:

里面存的是键值对,一个键可以对应多个值,但一个值只可以对应一个键。那么hashmap可不可以存空键后面跟一个值?能!

直接返回值。

Map 集合没有迭代器,它的取出方式有两种:

第一种是KeySet()方法,把键存进Set集合中,然后用Set集合的迭代器遍历得到所有的键,再用Map集合的get()方法,参数传入键,取出值。

第二种是entrySet()方法,把键值对这种映射关系存进Set集合。调用entry(),返回值实际上包含了键和值两个数据,用getke'y()方法和        getvalue()两个方法,可以分别取出键和值。

TreeMap sets = new TreeMap(new MyCompare());

Set set = setsentrySet();

Iterator it = setiterator();

while (ithasNext()) {

/加了泛型的话,直接返回string key和string value,

然后用key和value调用getKey()和getValue()方法,不然。就用下面的强转/

Entry entry = (Entry)itnext();

Systemoutprintln(entrygetKey()+entrygetValue());

XStream 用法详解 java 类与 XML 互换
现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现。
我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输、接口调用的朋友有所帮助。
首先要导入jar包xstream-143-sourcesjar 和 xmlpull-1131jar 两个包;
其次是预备一个 XML 事例
[html] view plain copy
<config>
<span style="white-space:pre"> </span><client type="8888" osversion="9999" version="123" oemtag="5555" area="areacode"/>
<span style="white-space:pre"> </span><protocol>110</protocol>
<span style="white-space:pre"> </span><sign value="asdfasdf"/>
<span style="white-space:pre"> </span><vientiance version="version"/>
</config>
其次 就是 按照 XML节点的顺序 从外 到内 编写 java PO类,此实例的目的是将上面的XML转换为 AllnewstateRQ 这个实体类,然后从里面打印出测试数据。
下面依次是 config节点 对应的 AllnewstateRQ类 ; client 节点 对应的 Client 类;sign 节点对应的 Sign类;vientiance 节点 对应的 Vientiance类。
[java] view plain copy
package comwgqtest09_xml;
import comthoughtworksxstreamannotationsXStreamAlias;
@XStreamAlias("config")
public class AllnewstateRQ {
//当节点下有独立属性的时候,需要创建一个独立的类用来保存节点内的属性
private Client client = new Client();
private Sign sign = new Sign();
private Vientiance vientiance = new Vientiance();
//当节点下没有属性,直接由StringValue的时候可直接创建String类型属性
private String protocol;
public Client getClient() {
return client;
}
public void setClient(Client client) {
thisclient = client;
}
public Sign getSign() {
return sign;
}
public void setSign(Sign sign) {
thissign = sign;
}
public Vientiance getVientiance() {
return vientiance;
}
public void setVientiance(Vientiance vientiance) {
thisvientiance = vientiance;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
thisprotocol = protocol;
}
}
[java] view plain copy
package comwgqtest09_xml;

import comthoughtworksxstreamannotationsXStreamAlias;
import comthoughtworksxstreamannotationsXStreamAsAttribute;

@XStreamAlias("client")
public class Client {

@XStreamAsAttribute //对属性值进行注解
private String type;//此时类中的属性名要和xml内的属性名相对应

@XStreamAsAttribute
private String osversion;

@XStreamAsAttribute
private String version;

@XStreamAsAttribute
private String oemtag;

@XStreamAsAttribute
private String area;

public String getType() {
return type;
}

public void setType(String type) {
thistype = type;
}

public String getOsversion() {
return osversion;
}

public void setOsversion(String osversion) {
thisosversion = osversion;
}

public String getVersion() {
return version;
}

public void setVersion(String version) {
thisversion = version;
}

public String getOemtag() {
return oemtag;
}

public void setOemtag(String oemtag) {
thisoemtag = oemtag;
}

public String getArea() {
return area;
}

public void setArea(String area) {
thisarea = area;
}

}
[java] view plain copy
package comwgqtest09_xml;

import comthoughtworksxstreamannotationsXStreamAlias;
import comthoughtworksxstreamannotationsXStreamAsAttribute;

@XStreamAlias("sign") //此处要对应节点的名称
public class Sign {
@XStreamAsAttribute
private String value;//此处对应节点内属性名称
public String getValue() {
return value;
}
public void setValue(String value) {
thisvalue = value;
}
}
[java] view plain copy
package comwgqtest09_xml;

import comthoughtworksxstreamannotationsXStreamAlias;
import comthoughtworksxstreamannotationsXStreamAsAttribute;

@XStreamAlias("vientiance")
public class Vientiance {
@XStreamAsAttribute
private String version;
public String getVersion() {
return version;
}
public void setVersion(String version) {
thisversion = version;
}
}
测试main方法
[java] view plain copy
package comwgqtest09_xml;

import comthoughtworksxstreamXStream;
import comthoughtworksxstreamioxmlDomDriver;

public class TestStream {

public static void main(String[] args) {
String reqXml = getXml();
XStream xs = new XStream(new DomDriver());
xsprocessAnnotations(new Class[]{AllnewstateRQclass,Clientclass,Signclass,Vientianceclass});
Object obj = xsfromXML(reqXml);
AllnewstateRQ allnewstateRQ = (AllnewstateRQ) obj;
Systemoutprintln(allnewstateRQgetProtocol());
Systemoutprintln(allnewstateRQgetClient()getArea());
Systemoutprintln(reqXml);

}

static String getXml(){
StringBuilder str = new StringBuilder();
strappend("")
append("<config>")
append("<client type=\"8888\" osversion=\"9999\" version=\"123\" oemtag=\"5555\" area=\"areacode\" />")
append("<protocol>110</protocol>")
append("<sign value=\"asdfasdf\" />")
append("<vientiance version=\"version\" />")
append("</config>")
;
return strtoString();
}

}
输出结果:
[java] view plain copy
110
areacode
<config><client type="8888" osversion="9999" version="123" oemtag="5555" area="areacode" /><protocol>110</protocol><sign value="asdfasdf" /><vientiance version="version" /></config>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13363309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存