集合浅解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39088514/article/details/73478377

集合

集合,见名知意,就是把某些东西放在一起。但是它不同于数组。

简单的数据结构

  • 数组:数组在内存中开辟了连续的内存空间,方便查找和修改
  • 链表:链表是指在内存中开辟了每一块首尾相连地内存,尾部为null。其特点是方便增减。只需更换链接即可。

    代码如下:

     public class IOdemo1{
       private int age;
       priate IOdemo1 io;
        public void IOdemo1(int age){
        this.age=age;
         }
        public void setIOdemo1(IOdemo1 io){
          this.io=io;
         }
      }

   public class test{
     public static void main(String[] args){
     IOdemo1 io=new IOdemo1(10);
     IOdemo1 io1=new IOdemo1(10);
     IOdemo1 io2=new IOdemo1(10);
      io.setIOdemo1(io1);
      io1.setIOdemo1(io2);
     }
    }
  • 从代码中,我们看到,每一个实例化的对象,都会接到下一个对象,这就是链表

    • 二叉树:

    • 插入第一个数。如果比其大,则放在右边,反之放左边。

    • 2,5,9,1,4

    • hash表(散列表):

    • 散列表是由数组与链表组成。链表嵌在数组后边

Iterable

  • Iterable为集合的超级父类,多数集合都实现了这个接口。
List:

List类下由两个集合子类,分别是ArrayList和LinkedList

  • ArrayList:底层由数组实现,特点和数组一样。方便查找但是不方便增删。

代码如下:

   public static void main(String[] args) {
        java.util.List list=new ArrayList();
        list.add("asdasd");
        list.add("vcs");
        list.add("qwe");
    for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
            }

     运行结果:asdasd  vcs  qwe
  • LinkedList:底层由链表组成,特点与链表相同,方便增删但不方便查找。

代码如下:

    public static void main(String[] args) {
    java.util.List list=new java.util.LinkedList();
    list.add("admi");
    list.add("sdf");
    list.add(0, "sdj");
    for (Object object : list) {
        System.out.println(object);

    }
    System.out.println("----------------------");
     list.remove(2);
     for (Object object : list) {
            System.out.println(object);
        }
    } 

    运行结果:
    sdj
    admi
    sdf
    ----------------------
    sdj
    admi

Set:

  • 注:以tree开头的都是二叉树形式的存储结构,以hash开头的都是hash表的存储结构。
  • TreeSet:采用二叉树形式的存储结构。改集合会自动排序,查询速度比list快速。但是不如hashSet快,使用TreeSet需要重写Comparable和equlas。

代码如下:

Set set=new HashSet<>();
    set.add("asd");
    set.add("fdv");

    Iterator iterator = set.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }

Iterator 可迭代的 迭代器 父类是Iterable 均可使用,Iterator可以在方法中使用foreach循环去遍历数据。

foreach代码如下:

     for (Object object : set) {
            System.out.println(object);
        }
  • HashSet:

Map(映射):

  • 映射是以key—-value存的,如果相同的key则不存,而不是以value去分辨

  • HashMap

允许使用null键null值:

 HashMap map = new HashMap();
        map.put("a", "abc");
        map.put("b", "dsc");
        map.put("c", "ffc");
        Set keySet = map.keySet();
        for (Object object : keySet) {
            System.out.println(map.get(object));
        }
  • HashTable

    不能使用null键null值

  • TreeMap

    key必须实现Comparable

    根据key排序

  • Properties

    配置文件

    可读可写,一般只读

  • 用法与HashMap相同

泛型:

当我们写Comparator的时候,会发现后边跟这个T,这个T是什么呢,就是我们说的泛型。其实就是我们并不确定要传什么类型的,而是根据这个不确定的类型去写一些我们定制的方法或者规范。

 public class MyList<T> {
    List<T> list=new ArrayList<>();
    public void add(T t){
        list.add(t);
    }
    public T get(int index){
        return list.get(index);
    }
    public static void main(String[] args) {
    //      MyList<Student> list=new MyList<>();
    //      list.add(new Student("asd", 10, false));
    //      Student student = list.get(0);
        String msg;
        int error;

    }

猜你喜欢

转载自blog.csdn.net/qq_39088514/article/details/73478377