首先list与set都继承于Collection,
set是有序还是无序的_set是有序还是无序
set是有序还是无序的_set是有序还是无序
set是有序还是无序的_set是有序还是无序
set的特点是无法存放重复的元素。
map一个映射不能包含重复的键;每个键最多只能映射一个值。以键值对存放数据
以上三个都是接口且不能被实例化。
1.collection:层次中的根接口,jdk没有提供这个接口直接实现的类。
2.set是一个无序System.out.println(personSet);的,不能包含重复的元素。
3.list:是一个有序的可以包含重复的元素,提供了按索引访问的方式。
4.map:包含了key-value对,map中key必须,value可以重复。
二、针对每一种进行进一步的介绍
List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。
Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的作。
Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的性很重要,也是符合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照一次修改的值对象与键对应。对于值对象则没有性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用public int compareTo(Person o) {却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。
Set、list和map都 是。。
set、listSet接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet只能装值(set.add(""),list.add("")),
set是无序,不重复的
map装的是键值对(map.put("key","value"))
set
list和map中的泛型也是一样的。。。
泛型,括号里规定了放入的类的类型。 extends Object> 相当于放入的类都必须是Object的子类。这里相当于什么类都能放,写了也没什么用...写具体的类时才有用。直接看泛型再回来看就明白了
关注
ArrayList
List的特征是其元素以线性方式存储把1,2,3,4先后加进去,遍历出来就是1234,Set可不一定哟,可能就是4213或1243等等
你好!
set
是不保证中元素的顺序的
2.
list
才会有顺序
3.
set它不允许出现重复元素
且允许包含值为null的元素,但最多只能有一个null元素
4.
Set
和List
都继承了Conllection
你好!
set
是不保证中元素的顺序的
2.
list
才会有顺序
list的特征是其元素以线性方式存储
3.
set它不允许出现重复元素
且允许包含值为null的元素,但最多只能有一个null元素
4.
set
和list
都继承了conllection
无序集: Set
有序集: List
所以,凡是实现set的AbstractSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
都是无序的
凡是实现List的
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
都是有序的
personSetSortable.add(person);呵呵
对于补充
Map是根据key来存储的
所以,从这个角度讲,是有序的
j++) if(a[j]pareTo(a[j+1]) >0){ switched = true;i--){ Comparable large = a[0];j++) if(a[j]pareTo(large) >0){ large = a[j];j>=0 &&a[j]pareTo(e) >0;while(s >0 &&a[f]pareTo(e) <0){ a[s] = a[f];if(i >2 &&a[2]pareTo(a[1]) >0) s = 2;while(s >= 0 &&valuepareTo(a[s]) <0){ a[f] = a[s];if(s+1 <= i-1 &&a[s]pareTo(a[s+1]) <0) s = s+1;public static void MergeSort(Comparable[] a){ Comparable[] aux = new Com
首先,要明确“不保证有序”和“保证无序”不等价,HashSet的iterator是前者而不是后者,所以在一次运行中看到有序的结果也是正常的,但不能依赖这个有序行为。
所以,想要确保有序并且中无重复元素,用HashTree稳妥。
通常插入HashSet的是Integer,其hashCode()实现就返回int值本身。所以在对象hashCode这一步引入了巧合的“按大小排序”。然后HashMap.hash(Object)获取了对象的hashCode()之后会尝试进一步混淆。JDK8版ja.util.HashMap内的hash算法比JDK7版的混淆程度低;在[0, 2^32-1]范围内经过HashMap.hash()之后还是得到自己。单纯插入数字则正好落入这个范围内。外加load factor正好在此例中让这个HashMap没有hash冲突,这就导致例中元素正好按大小顺序插入在HashMap的开放式哈希表里。
这里修改把插入的数字先加上2的16次方,然后拿出来再减去2的16次方。
public class Test {
public static void main(String[] args){
HashSet
16 17 18 19 20 21 22 23 24 25 26 27 28 29 1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14
TreeSet输出:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
在Python set是基本数据类型的一种类型,它有可变(set())和不可变(frozenset)两种。
tuple算是list和str的杂合(杂交的都有自己的优势,上一节的末后已经显示了),那么set则可以堪称是list和dict的杂合。
set拥有类似dict的特点:可以用{}花括号来定义;其中的元素没有序列,也就是是非序列类型的数据;而且,set中的元素不可重复,这就类似dict的键,set也有一点list的特点:有一种可以原处修改。
以上内容参考personSet.add(new Person("Peter", 45));
SortedSet可以通过Comparable接口实现元素的排序;
try{对SortedSet进行遍历时,将根据Comparable规则,按从小到大的顺序进行遍历;
而Set不提供排序支持,对Set进行遍历时,遍历顺序是随机的.
set是sortedset的顶层接口 sortedset是可排序的接口
Set是无序的SortedSet是有序的
// 如果使用Set进行排序,那么必须要满足以下两个条件:
// 1, 使用有序SET,即TreeSet
// 2, 被排序对象必须实现Comparable接口
// 这样做,其实是限制了排序的有效性(你可能不知道被排序对象是否实现了Comparable接口,而且你也不大可能要求程序中所有Model都实现这个接口)。
// 更好的排序方式是使用List进行排序,对List排序,只需要使用Collections.sort(list, comparator)静态方法。
// 个参数是要被排序的List,第二个参数是实现了Comparable接口的排序器。如果你要使用不同的排序方法,只需要替换第二个参数即可。
// 使用List进行排序,不需要被排序对象实现Comparable接口,而且排序算法是通过实现Comparable接口而来,这带来了极大的灵活性。
// 问题:我先将Set转为List,使用List排序后,再转为Set是否可行?
// :基本不可行,如果将List转为无序Set,则不能保证顺序;若将List转为TreeSet,虽理论上说能保证顺序,但要求被排序对象实现Comparable接口。
// 可运行示例如下
import ja.util.ArrayList;
import ja.util.Collections;
imp@Overrideort ja.util.Comparator;
import ja.util.HashSet;
import ja.util.List;
import ja.util.Set;
import ja.util.TreeSet;
public class Question {
class Person{
private int age;
private String name;
public String toString(){
return name + ":" + age;
}public int getAge(){
return age;
this.name=name;
this.age = age;
class PersonSortable extends Person implements Comparable
public PersonSortable(String name, int age){
super(name, age);
}@Override
int thisAge = this.getAge();
int otherAge = o.getAge();
return thisAge - otherAge;
class PersonComparator implements Comparator
public int compare(Person o1, Person o2) {
return thisAge - otherAge;
public Question(){
Set
personSet.add(new Person("Smith", 25));
personSet.add(new Person("Lee", 35));
personSet.add(new Person("Dick", 55));
System.out.println("发生异常:" + e.getMessage());
}System.out.println("有序SET,Person未实现Comparable, 示例。");
Set
personSet.add(new Person("Smith", 25));
personSet.add(new Person("Lee", 35));
personSet.add(new Person("Dick", 55));
System.out.println("发生异常:" + e.getMessage());
}System.out.println("无序SET, PersonSortable实现了Comparable, 示例。");
personSet.add(new PersonSortable("John", 15));
personSet.add(new PersonSortable("Lee", 35));
personSet.add(new PersonSortable("Peter", 45));
personSet.add(new PersonSortable("Dick", 55));
System.out.println("发生异常:" + e.getMessage());
}System.out.println("有序SET,PersonSortable实现了Comparable, 示例。");
Set
personSet.add(new PersonSortable("John", 15));
personSet.add(new PersonSortable("Lee", 35));
personSet.add(new PersonSortable("Peter", 45));
personSet.add(new PersonSortable("Dick", 55));
System.out.println("发生异常:" + e.getMessage());
}System.out.println("使用Collection.sort进行排序示例。");
List
personList.add(new Person("John", 15));
personList.add(new PersonSortable("Smith", 25));
personList.add(new Person("Lee", 35));
personList.add(new PersonSortable("Peter", 45));
personList.add(new Person("Dick", 55));
Collections.sort(personList, new PersonComparator());
System.out.println(personList);
System.out.println("t将排序后的结果封装回无序SET:");
for(Person person : personList){
personSetUnSortable.add(person);
}System.out.println("t" + personSetUnSortable);
for(Person person : personList){
}System.out.println("t" + personSetSortable);
System.out.println("发生异常:" + e.getMessage());
public static void main(String args[]){
new Question();
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。