java笔记第十一章之集合

来源:互联网 发布:java 1到100阶乘 编辑:程序博客网 时间:2024/05/17 02:18

第十一章:集合

@集合:集合是java中提供的一种类型,用于存储管理对象

 为什么不用数组?1,数组难以扩充  2,不好进行插入和删除

#集合实际上存储的是多个对象的引用(简化成了集合存对象)

#集合的分类:

1,List (有顺序,可重复)

2set(无序,不可重复)

3map(键值对key value 键不可重复)

@List接口

boolean add(Object o);

boolean isEmpty();

boolean remove(Object o);

void clear();

int size();

Iterator iterator();//遍历

Object get(int index);

int indexOf(Object o);

#ArrayList list接口的实现类(会增删改查就行)add,remove,set,get

String s1=new String("zhang");

List l=new ArrayList();//这里一般都要声明成接口类型,典型的多态,子类实现

l.add(s1),l.remove("l")

l.get("liu"),l.set(2,"zhang")

(student)l.get(0).getName() 这里一定要强转(这里我们知道l.get(0)获得对象就是student对象),因为get(0)返回Object类,父类不知道子类有什么方法

#,iterator遍历 (刚使用的是用get获得对象)

  Iterator i=List.iterator(),//返回一个指针对象,指向第一个元素,这个对象调用next()方法,在没调用之前指向第一个元素之前,每调用一次向下走一格

public Object next();  //每当指针向下走一格时都要先调用HashNext方法,判断有没有下一个元素,这样完成对整个集合的遍历

public boolean HasNext();

#;注意:next()返回Object对象实际中药转换成不同对象,whilei.HashNext()//这步在Ide中会自动完成

#.list排序,对于字符串排序时 只需调用void Collection.sort(List)

但对于对象排序时(按对象的莫个属性排序)这时要实现Comparable接口

public int comparaTo(Object o){

  if(this.age>o.age){return -1}

 else if(this.age==u1.age){return 0}

 else return 1;

}//这段代码直接写成Student s=(Student)0  return this.age-o.age  就行

#另一个实现类LinkedList 二者的实用方式上市没有任何区别,二者的区别是实现方式上

      实现方式        特点

ArrayList     数组实现      增删慢,查询快

LinkedList    链表实现      增删快,查询慢

@,set接口

boolean add(Object o);

boolean isEmpty();

boolean remove(Object o);

void clear();

int size();

Iterator iterator();

1,HashSet无顺序,不可重复(有重复的打印不出来)

   s1=new String("zhang1");

   s2=new String("zhang2");

   s3=new String("zhang3");

s4=new String("zhang 1");//打印出结果 只有一个zhang1

   set s=new Hashset();

   s.add(s1),s.add(s2),s.add(s3)

   Iterator i=s.iterator();

   while(i.hasNext()){ sysout(i.next())}//这时打印出来的不一定是加进去是的顺序了

hashSet在过滤重复对象时就需要看对象内容是否相等

#,HashSet怎样存储对象(object 中定义了public int hashCode

1,调用HashCode()

2,hashCode值满足条件时,再调用equals

#treeSet

1,过滤重复是以ComparaTo方法中判断2个内容是否相等作为判断重复数据的依据

Student s=(Student)o;

if(this.age!=age) return this.age-s.age;

else return this.name.comparaTo(s.name);

#,Collection 接口 共性:往集合中加对象;add iterativesize()

@,java.util.Map接口

1key不可重复,value可重复

 put(Object key,Object value);

 get(Object key);

 remove(Object key)

clear();isEmpty();size();

#,map以一个键值对存储管理对象

1HashMap常规使用

 Map m=new HashMap();

 m.put("key1","value1");

 m.put("key2","value2");

 m.put("key1","value3");//键不能重复,这里重复了

 sysout(m.get("key1"))//打印出最后一个存入的value3

 sysout(m.get("key8")) //打印出null

#HashMapkey也是通过Hash算法过滤重复的

  mapkey一般都应用String

#,值遍历

 collection c=m.values();

 Iterator i=c.iterator()

 while(i.hashNext()){

   sysout(i.next())

}

#,键遍历

Set s=m.keySet()

#,键值遍历(先拿到键)

set s=m.keySet();

Iterator i=s.iterator();

while(i.hashNext()){

 Object key=i.next();

 sysout(key+""+m.get(key));

}

#,treeMap可以对key应用排序(只针对键,可排序,不可重复)

 Map m=new TreeMap();重复的被过滤掉

1TreeMapkey是通过comparable接口过滤重复排序

  mapkey一般都应用String多(内部已经实现了)

2.HashTableHashMap的区别

HashMap    轻量级,速度快,线程不安全  允许null做键值

Hashtable  重量级,慢,安全            | null做键值会抛异常


原创粉丝点击