集合框架

来源:互联网 发布:练耳软件 mac 编辑:程序博客网 时间:2024/06/08 03:45


集合容器

         数组,StringBuffer,StringBuilder

集合特点:

         1.集合用来存储对象的容器

         2.集合长度是可变的

         3.集合不可以存储基本数据类型

集合框架:

         集合容器因为内部的数据结构不同,有多种具体容器

         顶层:接口Collection

                                     1.添加

                                               booleanadd(Object obj) 增加一个

                                               booleanaddAll(Collection coll)增加一个集合

                                              

                                     2.删除

                                               booleanremove(Object obj)删除一个元素,为改变集合的长度

                                              booleanremoveAll(Collection col)删除一个集合,多个元素

                                               voidclear()清空集合

                                     3.判断:

                                               booleancontains(Object ojb) 

                                               booleancontainsAll(Collection coll)

                                               booleanisEmpty();判断集合中是否有元素

                                     4.获取

                                               intsize();集合中元素的个数

                                               Iterator  iterator()

                                     5.其他

                                               booleanretainAll(Collection coll):取交集

                                               Object[]toArray()转为数组

                                     publicstatic void show(Collection c1,Collection c2){

                                               c1.add("abc1");

                                               c1.add("abc2");

                                               c1.add("abc3");

                                              

                                               c1.add("abc4");

                                               c1.add("abc5");

                                               c1.add("abc6");

                                              

                                               c1.addAll(c2);c2中的元素添加到c1

                                               System.out.println(c1);//[abc1,abc2,abc3,abc4,abc5,abc6]

                                     }

                                     c1.removeAll(c2):c1中删除c2集合,如果c1中有和c2相同的元素,也要删除

                                     c1.retainAll(c2):c1中存放着c1c2的交集

                                     Iteratorit = col.iterator();通过集合来获得迭代器的对象

                                      it.hasNext():判断集合是否存在下一个元素

                                     it.next():取出集合的当前指针的下一个元素,指针初始位置是在第一个元素的上一个位置

                                    当用for()是会释放迭代器

                                     for(Iteratorit = col.iterator;it.hasNext();)

                                     {

                                               System.out.println(it.next()):

                                     }

                                    迭代器对象:Iteratorit = col.iteator()。是通过col对象的成员内部类,通过该内部类来创建了一个,内部类对象。并且是用该

                                    内部类对象时,该内部类的接口来定义的。也就是该内部类实现了Iterator接口,然后用该类创建了一个接口类型的对象

                                    该对象就有了,hasNext(),next()方法。

         Collectio |

                             |接口List:有序(存入和取出顺序一致),元素都有索引(角标),元素可以重复

                              |1.添加

                                               voidadd(index,element);在指定位置插入指定元素

                              |            voidadd(index,collection);在指定位置插入集合

                                     2.删除

                                               Objectremove(index);删除指定下标的元素

                                     3.修改

                                               Objectset(index,element):把指定位置的元素,修改为指定元素

                                     4.获取

                                               Objectget(index)根据下标获取元素

                                               intindexOf(Object)根据对象获取第一次出现的下标

                                               intlastIndexOf(Object)从后面开始根据对象获取第一次出现的下标

                                               List   subList(from,to)获取从下标from开始,to结束的集合,包括from不包括to

                                              

                                     ListIterator特点

                                              如果Iterator对集合遍历的同时,又对集合修改,则集合会发生异常

                                              如果不想发生异常必须用ListItrrator

                                              

                                               Listlist = new ArrayList()

                                               list.add("avc1");

                                               list.add("avc2");

                                               list.add("avc3");

                                               Iteratorit = list.iterator();

                                              

                                               while(it.hasNext()){

                                                        Objectobj = it.next()

                                                        if(obj.equals("avc2"))

                                                                 list.add("dd");//此处会发生ConcurrentModificationException异常

                                               }

                                              

                                              修改措施

                                              使用ListIterator:还可以逆序hasPrevious() previous();

                                              ListIteratorit = list.listIterator();

                                               while(it.hasNext()){

                                                        Objectobj = it.next();

                                                        if(obj.equals("av"))

                                                        it.add("ddd");

                                               }

                                     List

                                              |Vector:部是数组的数据结构:查找,和修改都比较慢,并且是同步的

                                              |ArrayList:部也是数组的数据结构,查找比较快,但是增加比较慢,内部是异步的

                                                       

                                               |LinkedList:内部是链表的数据结构,查找比较慢,但是增加比较快,他也是异步

                                                        addFirst()    addLast()  增加的两个方法 removeFirst()删除第一个 isEmpty()空为真

                                                        removeLast();removeFirst()

                                                        getFirst()

                                                        getLast()

                                                       升级后:peekFirst()//获取但不移除,如果链表为空,不会抛出NoSuchElementException

                                                        pollFirst()//获取并移除,如果链表为空,不会抛出NoSuchElementException

                                                       堆栈:first inlast out  FIFO

                                                       队列;FIFO

                                                       装箱的条件:基本数据类型赋值给引用数据类型时,自动装箱

                             接口Set:元素不能重复,无序

                   Set接口中的方法和Collection一致

                   |--HashSet:部数据结构是哈希表

                            set集合中只有一种取值方法,只能用迭代器     

                            哈希表确定元素是否相同

                                     1.判断的两个元素的哈希值是否相同。

                                              如果相同,在判断两个对象的内容是否相同

                                     2.判断哈希值相同,其实判断的是对象的hashCode()的方法。判断内容相同,用的是equals

                                     //ArrayList中的contains原理是equals();,如果想两个对象指定内容相同,只要重写equals();方法

                                    如果是HashSet则先判断hasCode(),当值相同时,在判断equals();方法

                                    ArrayList 删除一个元素,看比较的元素和集合中元素相等的依据是equals()方法。可以自定义该方法

                                    HashSet  删除一个元素,看比较的元素和集合中元素相等的依据是hashCodeequals()方法。可以自定义该方法

                                     LinkedHashSet 有序,不重复

                                     publicclass Quzhi {

                                               publicstatic void main(String[] args) {

                                                        ArrayListlist = new ArrayList();

                                                         

                                                        list.add("abc");

                                                        list.add("abc1");

                                                        list.add("abc");

                                                        list.add("abc1");

                                                        list.add("abc");

                                                       

                                                        Iteratorit = list.iterator();

                                                        System.out.println("之前的集合");

                                                        while(it.hasNext()){

                                                                 System.out.print(it.next()+"");

                                                        }

                                                        System.out.println("之后的集合");//也可以用contains判断集合中是否存在元素

                                                        //contains原理是equals();

                                                        HashSethash  = new HashSet();

                                                        Iteratorit1 = list.iterator();

                                                        while(it1.hasNext()){

                                                                 hash.add(it1.next());

                                                        }

                                                       

                                                        Iteratorhi = hash.iterator();

                                                        while(hi.hasNext()){

                                                                 System.out.print(hi.next()+"");

                                                        }

                  

                   |--TreeSet:

                            特点:按照指定方式排序,接口Comparable<T>自然比较法,强制使用compareTo()方法

                                    判断元素的唯一性方式:就是根据比较方法的返回结果是否为0,是0,就是相同元素

                                    

                                     TreeSet对元素进行排序的方式一:

                                              让元素自身具备比较功能,元素需要实现Comparable接口,覆盖compareTo方法

                                              程序中的this代表本对象,也就是待插入的元素,和集合中的元素比较后,如果是1则放置集合的后面,0放弃,小于0放在前面

                                              

                                               classPerson implements Comparable{

                                                        privateString name;

                                                        privateint age;

                                                        publicPerson(String name, int age) {

                                                                 super();

                                                                 this.name= name;

                                                                 this.age= age;

                                                        }

                                                        publicString getName() {

                                                                 returnname;

                                                        }

                                                        publicvoid setName(String name) {

                                                                 this.name= name;

                                                        }

                                                        publicint getAge() {

                                                                 returnage;

                                                        }

                                                        publicvoid setAge(int age) {

                                                                 this.age= age;

                                                        }

                                                        @Override

                                                        publicString toString() {

                                                                 return"Person [name=" + name + ", age=" + age + "]";

                                                        }

                                                        @Override

                                                        publicint compareTo(Object o) {

                                                                 Personperson = (Person) o;

                                               //               if(this.age>person.age){

                                               //                         return 1;//往下排,升序

                                               //               }

                                               //               else if(this.age<person.age){

                                               //                         return -1;

                                               //               }

                                               //               else{

                                               //                         returnthis.name.compareTo(person.name);

                                               //               }

                                                                 inttemp = this.age - person.age ;

                                                                 returntemp==0?this.name.compareTo(person.name):temp;

                                                                

                                                        }

                                                       

}

                                                        publicclass TreeSetDemp {

 

 

                                                                 publicstatic void main(String[] args) {

                                                                           TreeSet  ts = new TreeSet();

                                                                           ts.add(newPerson("ava1",31));

                                                                          ts.add(newPerson("ava2",32));

                                                                           ts.add(newPerson("ava3",33));

                                                                           ts.add(newPerson("ava7",34));

                                                                           ts.add(newPerson("ava4",37));

                                                                          

                                                                           PrintTreeSet(ts);

                                                                          

                                                                 }

 

                                                                 privatestatic void PrintTreeSet(TreeSet ts) {

                                                                           Iteratorit = ts.iterator();

                                                                           while(it.hasNext()){

                                                                                    System.out.println(it.next());

                                                                           }

                                                                 }

        

                   如果不要按照对象中具备的自然排序进行排序        

                            可以使用TreeSet集合第二种排序方式2

                  内部结构是一个二叉树,

                                    让集合自身具备比较功能;定义一个类实现Comparator接口,覆盖compare方法(1)原序

                                    将该类对象作为参数传递给TreeSet的构造方法,是集合具备排序功能

                                     classComparatorByName implements Comparator{

 

                                     @Override

                                     publicint compare(Object o1, Object o2) {

                                               Personp1 = (Person)o1;

                                               Personp2 = (Person)o2;

                                               inttemp = p1.getName().compareTo(p2.getName());

                                               returntemp==0?p1.getAge()-p2.getAge():temp;

                                              

                                     }

 

                            }

                            TreeSet  ts = new TreeSet(new ComparatorByName());

 

原创粉丝点击