Vector与Map

Map集合

map集合的使用

package com.cloud.map;

import java.util.HashMap;

import java.util.Map;

publicclass Demo1 {

/*

   双列集合:

   Map:实现Map接口的集合类,具备的特点:存储的数据都是以键值对的方式,键不可以重复,值可重复

*/

   publicstatic void main(String[] args) {

      Map<String,String> map = new HashMap<String,String>();

      map.put("1","aaa");

      map.put("2","bbb");

      map.put("3","ccc");

      /*添加常用的方法

      //这里返回null:表示4这个键以前没有关联的值

      System.out.println(map.put("4", "ddd"));

      //这里输出关联的值ddd,会被abc覆盖

      map.put("5", "abc");

      System.out.println(map.put("4", "abc"));

      Map<String,String> map2 = new HashMap<String,String>();

      map2.put("6", "eee");

      map2.put("1", "aaa");

      map2.put("1", "ert");

      map.putAll(map2);

      */

      /*删除数据常用的方法

      System.out.println("删除的数据:"+map.remove("1"));

      map.clear();

      */

      /*获取方法

      System.out.println(map.get("1"));

      System.out.println(map.size());

      */

      /*判断的方法

      System.out.println(map.containsKey("1"));

      System.out.println(map.containsValue("aaa"));

      map.clear();

      map.put(null, null);

      System.out.println(map.isEmpty());

      */

      System.out.println("集合元素:"+map);

   }

}

HashMap的使用

package com.cloud.map;

import java.util.HashMap;

import java.util.Map;

publicclass Demo2 {

/*

HashMap

   底层使用hash表来实现

   HashMap中添加元素的时候,首先调用键的hashCode方法得到元素的哈希码的值,经过运算,得

   到该元素在哈希表中的位置;

   1.如果该位置没有存储元素,则元素之间添加到哈希表中

   2.如果该位置有其他的元素,会调用元素的equals方法,如果返回false,该元素被储存,返回

     true,该元素重复不能存储

*/

   publicstatic void main(String[] args) {

      Map<Person,String> map = new HashMap<Person,String>();

      map.put(new Person(1,"a"),"aaa");

      map.put(new Person(2,"b"),"bbb");

      map.put(new Person(3,"c"),"ccc");

      map.put(new Person(1,"a"),"ddd");

      System.out.println("集合的元素:"+map);

   }

}

class Person{

   privateint id;

   private Stringname;

   public Person(int id,String name){

      this.id=id;

      this.name=name;

   }

   @Override

   public String toString() {

      return"[编号:"+this.id+";姓名:"+this.name+"]";

   }

   @Override

   publicint hashCode() {

      //TODO Auto-generated method stub

      returnthis.id;

   }

   @Override

   publicboolean equals(Object obj) {

      Person p=(Person) obj;

      returnthis.id==p.id;

   }

}

TreeMap的使用

package com.cloud.map;

import java.util.Comparator;

import java.util.TreeMap;

publicclass Demo3 {

/*

TreeMap:基于二叉树的数据结构实现的,会对具备自然特性的键进行排序存储

1.元素的键具备自然特性,直接排序存储

2.不具备自然特性,实现Comparable接口,在ComparaTo中定义排序规则

3.不具备自然特性,没有实现Comparable接口,在创建TreeMap对象的时候传入比较器

 */

   publicstatic void main(String[] args) {

      //创建一个比较器

      MyComparator my=new MyComparator();

      TreeMap<Emp,String> map=new TreeMap<Emp,String>(my);

      /*map.put('c', 3);

      map.put('b', 2);

      map.put('a', 1);*/

      map.put(new Emp("a",5000),"6");

      map.put(new Emp("b",4000),"5");

      map.put(new Emp("c",3000),"4");

      map.put(new Emp("d",2000),"3");

      //下面e的值1就会覆盖d的值3

      map.put(new Emp("e",2000),"1");

      System.out.println(map);

   }

}

class Emp/*implements Comparable<Emp>*/{

   String name;

   intsarlary;

   public Emp(String name,int sarlary){

      this.name=name;

      this.sarlary=sarlary;

   }

   @Override

   public String toString() {

      return"[姓名:"+this.name+";薪水:"+this.sarlary+"]";

   }

   /*@Override

   publicint compareTo(Emp o) {

      return this.sarlary-o.sarlary;

   }*/

}

//自定义一个比较器

class MyComparatorimplements Comparator<Emp>{

   @Override

   publicint compare(Emp o1, Emp o2) {

      return o1.sarlary-o2.sarlary;

   }

}

Vector集合

Vector类 是在 java 中可以实现自动增长的 对象数组,vector在C++ 标准模板库中的部分内容,它是一个多功能的,能够 操作多种数据结构和算法的模板类和函数库

vector是 C++ 标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说, vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
简单的使用方法如下:
1
2
3
vector<int>test; //建立一个vector
test.push_back( 1 );
test.push_back( 2 ); //把1和2压入vector这样test[0]就是1,test[1]就是2
我们可以用一个 迭代器
vector<int>::iterator iter=test.begin();//定义一个可以迭代int型vector的迭代器iter,它指向test的首位
for(;iter!=test.end();iter++) cout<<(*iter);//iter++指的是向后迭代一位,直到iter到超出末端迭代器为止,输出迭代器指向的值
我们也可以使用at访问:
1
2
3
4
vector<int>test; //建立一个vector
test.push_back( 1 );
test.push_back( 2 ); //把1和2压入vector这样test[0]就是1,test[1]就是2
int i =test. at ( 1 ); //i为2
JAVA
Java.util.Vector提供了向量(Vector)类以实现类似动态 数组的功能。在 Java语言中是没有 指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“ 动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,向量类中提供的大量方法也大大方便了用户的使用。
在相对于ArrayList来说, Vector线程是安全的,也就是说是同步
创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。 对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种 构造方法
1
2
3
public  Vector()
public  Vector( int  initialcapacity, int  capacityIncrement)
public  Vector( int  initialcapacity)
使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。
参数capacityIncrement给定了每次扩充的扩充值。 当capacityIncrement为0时,则每次扩充一倍。利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户使用:

package com.cloud.vector;

import java.util.Enumeration;

import java.util.Vector;

publicclass Day1 {

   /*

   Vector底部维护Object数组,实现和ArrayList一样,但是Vector是线程安全,效率低,二者比较:

  相同点:

      1.底部都是维护Object的数组

   不同点:

      1.ArrayList线程不同步,效率高

      2.ArrayList JDK1.2出现,Vector JDK1.0出现

   */

   publicstatic void main(String[] args) {

      Vector v=new Vector();

      v.addElement("Spring1");

      v.addElement("Spring2");

      v.addElement("Spring3");

      Enumeration e = v.elements();

      while(e.hasMoreElements()){

        System.out.println(e.nextElement());

      }

   }

}

猜你喜欢

转载自blog.csdn.net/qq_34569497/article/details/80240704