Java集合框架

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。

任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
适合存储复杂的数据结构。

  • 接口:表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
  • 实现:集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
  • 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现
Java集合框架_第1张图片
集合框架.png
  • Iterator接口

  • Collection接口(存储不唯一,无序对象)

    • List接口(存储不唯一,有序对象)<-----实现类:ArrayList,LinkedList
    • Set接口(存储唯一,无序对象)<-----实现类:HashSet,TreeSet
  • Map接口(存储一组键值对象) 实现类:HashMap,TreeMap

  • 算法类:Collections,Arrays

Iterator接口

专门对集合进行迭代的迭代器,主要有两个方法

hasNext();//判断是否存在下一个可访问的元素,如果有就继续迭代,返回true,否则返回false
next();//返回要访问的下一个元素

ArrayList

基于数组的存储方式,在内存中分配连续的空间存放数据,遍历元素的随机访问的效率比较高。对数组进行了封装,实现了长度可变的数组。也可理解为存放对象的动态数组。

常用方法:

boolean add(E e)  //将指定的元素添加到此列表的尾部。
void add(int index, E element) //将指定的元素插入此列表中的指定位置。
void clear()//移除此列表中的所有元素。
boolean contains(Object o)//如果此列表中包含指定的元素,则返回 true。
E get(int index)//返回此列表中指定位置上的元素。
int indexOf(Object o)//返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
boolean isEmpty()//如果此列表中没有元素,则返回 true
E set(int index, E element)//用指定的元素替代此列表中指定位置上的元素。
E remove(int index)//移除此列表中指定位置上的元素。
boolean remove(Object o)//移除此列表中首次出现的指定元素(如果存在)。
int size()//返回此列表中的元素数。

示例代码:

public class Demo {
    public static void main(String[] args) {
      ArrayList list = new ArrayList();
      list.add("张三丰");
      list.add("郭靖");
      list.add(1,"杨过");
      System.out.println(list.contains("李莫愁"));
      list.remove(0);
      list.set(1, "黄蓉");
      for(int i = 0; i < list.size(); i++){
          String name = list.get(i);
          System.out.println(name);
      }
      System.out.println(list.indexOf("小龙女"));
      list.clear();
      System.out.println(list.isEmpty());
    }
}

LinkedList

基于链表的存储方式,插入、删除元素时效率比较高,查找效率低。
LinkedList除了包含ArrayList的方法外,还有一些独有的方法。

void addFirst(E e)//在集合首部插入元素
void addLast(E e)//在集合尾部插入元素
E getFirst()//获得当前集合的第一个元素
E getLast()//获得当前集合的最后一个元素
E removeFirst()//移除并返回当前集合的第一个元素
E removeLast()//移除并返回当前集合的最后一个元素
public class Demo {
    public static void main(String[] args) {
        NewsTitle car = new NewsTitle(1,"汽车","管理员");
        NewsTitle medical = new NewsTitle(2,"医学","管理员");
        NewsTitle fun = new NewsTitle(3,"娱乐","管理员");
        NewsTitle gym = new NewsTitle(4,"体育","管理员");
        
        LinkedList newsTitleList = new LinkedList();
        newsTitleList.add(car);
        newsTitleList.add(medical);
        newsTitleList.addFirst(fun);
        newsTitleList.addLast(gym);
        NewsTitle first = (NewsTitle)newsTitleList.getFirst();
        NewsTitle last = (NewsTitle)newsTitleList.getLast();
        System.out.println("头条是"+first.getTitle());
        System.out.println("最后一条是"+last.getTitle());
        
        newsTitleList.removeFirst();
        newsTitleList.removeLast();
        System.out.println("头条和末尾已删除");

        for(NewsTitle news : newsTitleList){
            System.out.println("新闻标题是: "+news.getTitle());
        }
    }
}

HashSet

基于散列的数据存储方式,存放唯一、无序的对象,存放的其实是对象的引用,采用equals()方法比较两个对象的指针,保证对象在集合中是唯一的。在无序的集合中查找元素的效率比较高。

常用方法:

boolean add(E e)//如果此 set 中尚未包含指定元素,则添加指定元素。
void clear()//从此 set 中移除所有元素。
boolean contains(Object obj)//如果此 set 包含指定元素,则返回 true。
boolean isEmpty()//如果此 set 不包含任何元素,则返回 true。
Iterator iterator()//返回对此 set 中元素进行迭代的迭代器。
boolean remove(Object o)//如果指定元素存在于此 set 中,则将其移除。
int size()//返回此 set 中的元素的数量(set 的容量)。

示例代码:

public class Demo {
    public static void main(String[] args) {
        NewsTitle car = new NewsTitle(1,"汽车","管理员");
        NewsTitle test = new NewsTitle(2,"高考","管理员");
        
        Set newsTitleList = new HashSet();
        newsTitleList.add(car);
        newsTitleList.add(test);
        
        System.out.println("新闻标题数目为:"+newsTitleList.size());
        System.out.println("汽车新闻是否存在:"+newsTitleList.contains(car));
        newsTitleList.remove(car);
        System.out.println("集合是否为空:"+newsTitleList.isEmpty());
        
        System.out.println("遍历新闻所有标题:");
        for(NewsTitle news : newsTitleList){
            System.out.println("新闻标题是:"+news.getTitle());
        }
    }
}

HashMap

Map接口存储一组成对的键值对象,(key,value),提供key到value的映射,通过key来检索,key必须唯一,可以无序;value可以无序,可以不唯一。
HashMap的查询指定元素效率较高。

常用方法:

void clear()//清空集合中的所有元素
boolean  containsKey(Object key)//集合中是否存在key
boolean  containsValue(Object value)//集合中是否存在value
boolean  isEmpty()//集合是否为空
V put(K key, V value)//将一对key,value放入集合,如果集合中已经存在,将替换旧值
V get(Object key)//根据key,返回对应的value
V remove(Object key)//从集合中移除与key相关的映射,并返回key关联的value
int size()//集合中元素的数量
Set keySet()//返回所有key的集合
Collection  values()//返回所有value的集合

示例代码:

public class Demo {
    public static void main(String[] args) {
        Student stu1 = new Student("郭靖","男");
        Student stu2 = new Student("黄蓉","女");
        
        Map students = new HashMap();
        students.put("tom", stu1);
        students.put("rose",stu2);
        System.out.println("已添加"+students.size()+"个学生信息");
        System.out.println("键集"+students.keySet());
        
        String key = "tom";
        if(students.containsKey(key)){
            Student stu = students.get(key);
            System.out.println("英文名是"+key+"的学生是"+stu.getName());
        }
        
        String key1 = "rose";
        if(students.containsKey(key1)){
            students.remove(key1);
            System.out.println(key1+"学员的信息已删除");
        }
    }
}

Collections

Collections是Java提供的一个集合操作工具类,包含了大量的静态方法,用于实现对集合元素的排序、查找和替换等。

常用方法:

sort();//对集合中的元素排序,要实现一个类的对象排序,这个类就要实现Comparable接口,重写compareTo()方法,按指定方式比较对象,再调用Collections的sort()方法
binarySearch();//查询元素,返回元素下标
fill();//替换集合中的所有元素为相同元素

示例代码:

public class Student implements Comparable{//实现Comparable接口
    private int number = 0;
    private String name = null;
    private String gender = null;
    //......省略......
    
    @Override
    public int compareTo(Object obj) {//重写compareTo()方法
        Stu stu = (Stu)obj;
        if(this.number == stu.getNumber()){
            return 0;
        }else if(this.number > stu.getNumber()){
            return 1;
        }else{
            return -1;
        }
    }
}

public class Demo {
    public static void main(String[] args) {
        Student s1 = new Stu();
        //......省略......
        ArrayList list = new ArrayList();
        list.add(s1);
        list.add(s2);
        list.add(s3);

        Collections.sort(list);//排序
        System.out.println("排序后:————————————————");
        Iterator it = list.iterator();
        while(it.hasNext()){
            Student stu = (Student)it.next();
            System.out.println(stu.getNumber());
        }

        int index = Collections.binarySearch(list, s1);//查询
        System.out.println("s1的索引是:"+index);

        Collections.fill(list, s1);//list中的所有元素都替换成s1
    }
}
 

                            
                        
                    
                    
                    

你可能感兴趣的:(Java集合框架)