java基础学习——集合

-------|List: 有存储顺序, 可重复
-----------|ArrayList: 数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
-----------|LinkedList: 链表实现, 增删快, 查找慢由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删   效率较高但查询时需要一个一个的遍历, 所以效率较低
-----------|Vector: 和ArrayList原理相同, 但线程安全, 效率略低和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低
-------|Set: 无存储顺序, 不可重复
-----------|HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
-----------|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。
-------| Map: 键值对 键不可重复,键可以重复
-----------|HashMap 线程不安全,存取速度快。底层是以哈希表实现的.
-----------|TreeMap 红-黑树的数据结构,默认对元素进行自然排 序(String)。如果在比较的时候两个对象返回值为0,那么元素重复
-----------|HashTable 底层也是使用了哈希表 维护的,存取的读取快,存储元素是 无序的。

一、HashSet集合:无序存储,不可重复

当我们想创建一个hashset集合,往HashSet内添加元素的时候,会首先调用HashCode方法得到哈希值,然后把哈希值经过运算 算出来该元素在哈希表中位置,如果该位置不存在别的元素则直接加进去,如果存在别的元素则调用equals()方法与该位置上的方法比较一次。

1.元素为string类型,可以直接用HashSet<string>集合来创建,string集合重写了hashcode()equals()方法

2.元素为自定义对象,需要重写重写了hashcode()equals()方法。

 

 1 class Person {
 2     int id;
 3     String name;
 4     
 5     public Person (int id, String name ){
 6         super();
 7         this.id= id;
 8         this.name= name;
 9     }
10     @Override
11     public int hashCode() {
12         // TODO Auto-generated method stub
13         return this.id;
14     }
15     @Override
16     public boolean equals(Object obj) {
17         Person person = new Person(id, name);
18         return this.id==person.id;
19     }
20     @Override
21     public String toString() {
22         return "编号:"+this.id+"  姓名:"+this.name +"   hashcode:"+this.hashCode();
23     }
24 }
25 public class demo1 {
26     public static void main(String[] args) {
27         HashSet<Person> set = new HashSet<Person>();
28         set.add(new Person(001,"jjj"));
29         set.add(new Person(001,"jjj"));
30         System.out.println("集合的元素:"+set);
31     }
32 }

 运行结果:

集合的元素:[编号:1 姓名:jjj hashcode:1]

 二、集合的遍历

 1     public static void main(String[] args) {
 2         ArrayList<String > list = new ArrayList<>();
 3         list.add("张三");
 4         list.add("李四");
 5         list.add("王五");
 6         System.out.println("----------get方式遍历----------");
 7         for (int i = 0; i < list.size(); i++) {
 8             System.out.println(i+":"+list.get(i));
 9         }
10         
11         
12         //迭代器遍历
13         
14         HashSet<String > hashSet = new HashSet<>();
15         hashSet.add("老大");
16         hashSet.add("老二");
17         hashSet.add("老三");
18         System.out.println("---------迭代器遍历----------");
19         Iterator<String> iterator = hashSet.iterator();
20         while (iterator.hasNext()) {
21             System.out.println(iterator.next());
22         }
23         
24         for(String item:hashSet){
25             System.out.println(item+",");
26         }
27         
28         Map<String , String > map = new HashMap<String , String >();
29         map.put("001","z001");
30         map.put("002","z002");
31         map.put("003","z003");
32         Set<Entry<String, String>> entrySet = map.entrySet();
33         for (Entry<String, String> entry : entrySet) {
34             System.out.println("key:"+entry.getKey()+"    value:"+entry.getValue());
35         }
36     }

 

转载于:https://www.cnblogs.com/wy0904/p/7460025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值