Ⅰ 问个初级问题。。。- -!
不一样的,Set 和HashSet 是有区别的,区别如下:
1、set中的数据是自动排好序的,不允许放入null值;而中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复。
2、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而
3、Set接口
Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。
Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象。
HashSet
HashSet有以下特点
不能保证元素的排列顺序,顺序有可能发生变化
不是同步的
集合元素可以是null,但只能放入一个null
当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值来决定该对象在HashSet中存储位置。
简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等
注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算hashCode的值。
不知道你满不满意,我QQ:347948138
Ⅱ c#怎么改变list集合里数据的类型
改变不了,只能改变集合里的数量。
要改变数据类型只能重新定义一个想要的数据类型的List数组
Ⅲ 在java的Map集合中,怎样更改value的值
map集合没有专门更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替换,比如想改变key是"1",value是"一"的组合,就是map.put("1","壹"),直接替换就行。
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
Map<Integer,Integer> m = new HashMap<Integer,Integer>();
m.put(1, 1);
print(m);
m.put(1, 2);
print(m);
}
private static void print(Map<Integer, Integer> m) {
for(Map.Entry<Integer, Integer> mm : m.entrySet())
System.out.println("K: "+mm.getKey()+",V: "+mm.getValue());
}
}
(3)如何改变hashset中的数据扩展阅读
集合类有一个共同特点,就是它们只容纳对象(实际上是对象名,即指向地址的指针)。这一点和数组不同,数组可以容纳对象和简单数据。如果在集合类中既想使用简单数据类型,又想利用集合类的灵活性,就可以把简单数据类型数据变成该数据类型类的对象,然后放入集合中处理,但这样执行效率会降低。
集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,也就是说,集合类中容纳的都是指向Object类对象的指针。
这样的设计是为了使集合类具有通用性,因为Object类是所有类的祖先,所以可以在这些集合中存放任何类而不受限制。当然这也带来了不便,这令使用集合成员之前必须对它重新造型。
集合类是Java数据结构的实现。在编写程序时,经常需要和各种数据打交道,为了处理这些数据而选用数据结构对于程序的运行效率是非常重要的。
Ⅳ 在java的Map集合中,怎样更改value的值
使用put(key,value) 就可以更改value的值.
如果key是不存在的, 那么put(key,value) 就会添加一条数据.
参考代码
importjava.util.HashMap;
publicclassDemo{
publicstaticvoidmain(String[]args){
HashMap<String,Integer>map=newHashMap<String,Integer>();
map.put("张三",89);
map.put("赵四",100);
System.out.println(map);
if(map.containsKey("张三")){//判断如果存在key,就修改value
map.put("张三",98);//修改
}
System.out.println("------分割线------");
System.out.println(map);
}
}
运行结果
{张三=89,赵四=100}
------分割线------
{张三=98,赵四=100}
Ⅳ java怎么修改Set里的值
通过remove和add方法,set集合中的对象属性为private final
Set接口
集合里的多个对象没有明显顺序。Set集合和Collection基本一样,没有
提供额外方法,只是和Collection行为不同
Set集合不允许包含相同的元素,如果add的是两个相同元素会返回false
Set不实用==运算符,根据equals方法
HashSet类
HashSet类是Set接口的典型实现,大多数时候使用Set集合都是用这个类实现
HashSet按Hash算法来存储集合中的元素
HashSet特点:
1.不能保证元素的排列顺序,顺序可能变化
2.HashSet不是同步的,多个线程同时访问一个Set集合,必须用代码
保证同步
3.集合元素值可以是null
当向HashSet集合中存入一个元素,HashSet会调用该对象的HashCode()
得到对象的hashCode,根据HashCode来决定对象在HashSet中的位置
如果两个元素equal方法比较返回true但是hashCode()方法返回值不同,
HashSet会把两个元素存储在不同位置
HashSet判断两个元素相同需要equal和hashCode都相同
因此重写类的equals方法和hashCode()方法要保证两个对象通过equals
返回true时hashCode也相等
Hash算法保证通过一个对象快速找到另一个对象。可以很快的执行,当需要
查找集合中的某个元素时,hash算法可以直接根据该元素的值找到该元素
从而让程序快速找到元素。
在数组中通过数组元素索引寻找元素,HashSet通过hashcode索引
重写hashCode()方法的基本步骤
当两个对象通过equals方法返回true时,两个对象的hashCode相等
对象中用作equals比较标准的属性,应该用来计算hashCode
向HashSet中添加可变对象时,如果修改HashSet集合中对象,有可能导致
该对象与集合中其他对象相等,从而导致HashSet无法正确访问对象
HashSet有一个子类 LinkedHashSet,LinkedHashSet集合也是根据HashCode来决定
元素的存储位置,同时使用链表维护元素次序,这样是的元素看起来是以
插入顺序保存,便利集合时会按插入顺序来访问。
Linked需要维护元素的插入顺序,性能略低于HashSet,但在迭代时性能更好
TreeSet是SortedSet接口的唯一实现
TreeSet可以确保元素处于排序状态。提供了几个额外方法:
1.Comparator
comparator():返回当前Set使用的Comparator,或者null,表示
自然的方式排序
2.Object first():返回集合中的第一个元素
3.Object last():返回集合中最后一个元素
4.Object lower(Object
e):返回集合中位于指定元素之前的元素
5.Object higher(Object
e):返回集合中位于制定元素之后的元素
6.SortedSet
subSet(fromElement,toElement):返回set的子集,范围从from到to
7.SortedSet headSet(toElement)返回set子集,小于toElement
8.SortedSet
tailSet(fromElement)返回set子集,由大于等于fromElement元素组成
TreeSet是根据元素值来进行排序而不是根据插入顺序
TreeSet采用红黑树的数据结构对元素排序 :支持自然排序(默认)和定制排序
自然排序:
TreeSet会调用集合元素的compareTo方法来比较元素之间的大小关系,
然后将集合元素按升序排列。
Java提供了一个Comparable接口,该接口定义了一个compareTo(Object obj)方法
该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象
可以比较大小。obj1.compareTo(obj2),如果方法返回0,表明两个对象相等。如果
返回正整数,表明obj1大于obj2;如果返回负整数,表明obj1小于obj2
如果要将对象添加如TreeSet该对象必须实现Comparable接口
当想TreeSet中添加对象时,会先将要添加的对象与TreeSet中的对象用compareTo比较
如果找不到compareTo则引发ClassCastException异常
因为只有同一个类型才能比较大小 所以TreeSet中添加的应该是同一个类型的对象
TreeSet和HashSet集合中的对象如果是可变对象,对象属性改变时,会导致集合处理
对象复杂化,易出错。所以应该尽量在集合中添加不可变对象
不可变对象是
1.属性为private final
2.含有带参数构造器,为对象初始化
3.属性有get方法没有set方法
定制排序:
TreeSet的自然排序是根据集合元素大小,TreeSet将它们以升序排列。使用定制
排序,如降序,使用Comparator接口的帮助。接口中包含一个int compare(T o1,T o2)
用于比较o1和o2的大小:重写该方法可以改变排序规则
Ⅵ java中使用ArrayList如何修改里面的内容.
java里增强for循环【for(String a: arrayList)】里面可以修改数据,但是不能删除数据,如下例子:
<pre t="code" l="java">修改集合:
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args){
//集合
List<String> arrayList=new ArrayList<String>();
//存放元素
arrayList.add("hello");
arrayList.add("ninghao");
arrayList.add("bye");
//集合标量
int index=0;
//遍历集合
for(String a:arrayList){
//输出集合对象
System.out.println(a);
//修改集合对象
arrayList.set(index, "hi");
//标量加一
index++;
}
//输出集合
System.out.println(arrayList);
}
}
结果:
hello
ninghao
bye
[hi, hi, hi]
删除集合元素:
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args){
//集合
List<String> arrayList=new ArrayList<String>();
//存放元素
arrayList.add("hello");
arrayList.add("ninghao");
arrayList.add("bye");
//集合标量
int index=0;
//遍历集合
for(String a:arrayList){
//输出集合对象
System.out.println(a);
//删除元素
arrayList.remove(index);
//标量加一
index++;
}
//输出集合
System.out.println(arrayList);
}
}
结果:
hello
Exception in thread "main" java.util.
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at app.TestA.main(TestA.java:19)由以上例子可以看出,增强for循环,在循环里可以修改集合元素,但是不能删除集合元素。
Ⅶ 在java的Map集合中,怎样更改value的值
map集合没有专门更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替换,比如想改变key是"1",value是"一"的组合,就是map.put("1","壹"),直接替换就行。
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("张三", 89);
map.put("赵四", 100);
System.out.println(map);
if (map.containsKey("张三")) {//判断如果存在 key ,就修改value
map.put("张三", 98);//修改
}
System.out.println("------分割线------");
System.out.println(map);
}
avaMap集合
Map集合没有继承Collection接口,,Map中不能包含相同的key值,每个key只能影射一个相同的value。key值还决定了存储对象在映射中的存储位置。
但不是key对象本身决定的,而是通过散列技术进行处理,可产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口所实现的类。
以上内容参考:网络-JavaMap集合
Ⅷ java中的set集合,有直接修改其中的数据的方法吗
编写一个工具方法吧,Object 修改为你Set中真正存储对象的类型就可以了.
public Set<Object> updateSetValue(Set<Object> oldSet) {
Set<Object> newSet = new HashSet<Object>();
for (Object s : oldSet) {
if (s != "你要修改前的值") {
newSet.add(s);
} else {
newSet.add("你要修改后的值");
}
}
return newSet;
}
Ⅸ 5.redis集合的创建和修改
集合的数据是唯一的,插入之后再次插入时不会执行
(1)查询集合里面元素的数量
(2)从集合中获取数据
--如果count省略则随机获取一条数据
--如果count为其他大于1的整数,则获取对应条数据
--如果count对应的证书大于集合总数据的条数,则获取集合所有数据
(3)获取集合中的所有数据
(4)判断集合中是否存在某个元素
--如果数据存在,则返回1,如果数据不存在,则返回0
既属于A集合又属于B/其他集合,集合数量可以是多个,多个代表对应所有集合的交集
A集合与B/其他集合所包含的所有数据,如果数据一样则去重,集合数量可以是多个,多个代表对应所有集合的并集
只属于A(key1)集合,不属于其他集合的数据
Ⅹ 如何将多组数据存放到不同的hashset中,然后遍历出这些hashset中的值
HashSet<String> set=new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
Iterator<String> iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
控制台输出:
3
2
1
对于集合这块的类都可以这样写的,比如你把第一行换成:
ArrayList<String> set=new ArrayList<String>();
后面的程序不动,一样可以遍历输出的。
不太懂的话可以网络Iterator的用法和原理