zoukankan      html  css  js  c++  java
  • Java高级特性 集合

    数据结构:计算机中用来存储或者管理数据的方式

    链表底层实现的代码:

    package demo3.lianxi1;

    public class MyLink {
    private int data;//存储链表的值
    private MyLink next;//指针指向下一个数据

    public MyLink(int i) {
    data=i;
    }
    //向链表中拼接值
    private void append(MyLink myLink) {
    MyLink s=this;
    while(s.next!=null){
    s=s.next;
    }
    s.next=myLink;
    }
    //向链表中增加值,每当增加一个值,都在第一个值的后面
    private void add(MyLink myLink) {
    myLink.next=next;
    next=myLink;
    }
    //把链表中的数据显示出来
    private void show() {
    MyLink s = this;
    while (s != null) {
    System.out.println(s.data);
    s = s.next;
    }
    }
    public static void main(String[] args) {
    MyLink link=new MyLink(1);
    link.append(new MyLink(10));
    link.append(new MyLink(20));
    link.append(new MyLink(30));
    link.add(new MyLink(3));
    link.show();

    }

    数组的特点:

         1.长度一旦被定义,就不允许被改变

         2.在内存中开辟连续的空间

         3.便于查询,但是插入和删除麻烦

    例子:

       如果我们创建一个容量为30的数组,用来存储学生信息

       1.一个班的学生如果不够30,造成资源浪费

       2.一个班的学生如果大于30,内存不够

    集合框架:  父接口Collection

    Collections一些方法来操作集合类

     Collections 所有集合类的工具类

     @test

    public void test01{

     List<String> list=new ArrayList<>();

     list.add("z");

     list.add("a");

     list.add("v");

     list.add("b");

     System.out.println("没有排序"+list);

     //1.升序--->sort

     Collections.sort(list);

     System.out.println("升序"+list);

    //2.降序-->reverse

    Collections.reverse(list);

    System.out.println("降序"+list);

    //3.查询某个元素在集合中的位置,必须先升序排序-->binarySearch

     Collections.sort(list);

     int index=Collections.binarySearch(list,"z");

     System.out.println("元素z存在的位置是:"+index);

    //4.随机排序---->shuffle

     Collections.shuffle(list);

    System.out.println("随机排序"+list);

    }

    实现对对象的排序   只有实现Comparable接口的类才能被排序

    //只有实现Comparable接口的类 才能被 排序!
    public class Student implements Comparable {

    private int id; // 学生编号
    private String name;

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Student() {
    super();
    }

    @Override
    public String toString() {
    return "Student [id=" + id + ", name=" + name + "]";
    }

    public Student(int id, String name) {
    super();
    this.id = id;
    this.name = name;
    }

    // 按照自己的规则 去进行 排序
    @Override
    public int compareTo(Object o) {
    if (o instanceof Student) {
    Student stu = (Student) o;
    if (stu.getId() == this.id) {
    return 0;
    } else if (stu.getId() < this.id) {
    return -1;//降序
    } else {
    return 1;
    }
    } else {
    return 0;
    }
    }

    }

    @test

    public void test02{

    List<Student> list=new ArrayList<>();

     list.add(new Student(50,"小黑50"));

     list.add(new Student(10,"小黑10"));

     list.add(new Student(80,"小黑80"));

     list.add(new Student(20,"小黑20"));

     list.add(new Student(60,"小黑60"));

    Collections.sort(list);

     for(Student student:list){

     System.out.println(student);

     } 

    }


     把数组转换成集合

    @Test
    public void test03() {
    String[] words = { "a", "b", "c", "d" };
    List<String> list = Arrays.asList(words);
    Collections.rotate(list, 2);//后移两位,把后面的两位移到前面
    System.out.println(list);
    }


    中文排序

    @Test
    public void test04() {
    List<String> list = new ArrayList();
    list.add("啊");
    list.add("在");
    list.add("把");
    list.add("好");
    list.add("是");
    Comparator<Object> c = Collator.getInstance(Locale.CHINA);
    Collections.sort(list, c);
    for (String s : list) {
    System.out.println(s);
    }
    }

    数组和...的区别以及用法

    /**
    * 01.可以传递0 或者 N个 int类型的数据
    * 02.怎么操作数组 怎么操作...
    * 03.必须位于参数列表中的最后一个位置
    */
    public static void main(String[] args) {
    String[] sales = { "啤酒", "饮料", "矿泉水" };
    slaeSometing("小粉");
    }

    /**
    * @param name 谁 在 出售 什么 东西
    * @param something 出售的东西
    */
    private static void slaeSometing(String name, String... something) {
    System.out.println(name + "在出售");

    for (int i = 0; i < something.length; i++) {
    System.out.print(something[i] + ",");
    }
    }

         public interface List<E> extends Collection<E>

         public interface Set<E> extends Collection<E>

         public interface Map<k.v>

        Vector  线程安全,但是性能低

        List接口常用的实现类  

         存储的都是不唯一(可以重复),有序(插入顺序)的数据   

           ArrayList底层就是一个动态数组,自动扩容

              List lis=new ArrayList();

    public ArrayList() {
    this.elementData = EMPTY_ELEMENTDATA;
    }

    private static final Object[] EMPTY_ELEMENTDATA = {};
    private transient Object[] elementData;

           

              我们在执行add();的时候,底层默认初始化了一个长度为10的数组,可以自动扩容1.5           倍

               Object[] elementData=new  Object[10];

             s.size();集合中元素的个数

             s.add();

             s.add(0,"");

             s.remove();

             s.remove(1,"");

             新增和删除的效率低,遍历效率快

           LinkedList底层就是一个链表,有自己特有而父类没有的方法

            有单链表和双链表(含有前驱和后继)之分

             LinkdeList lis=new LinkedList();

             新增和删除的效率高,查询效率低

        Set接口常用的实现类  散列表 Hash 以空间换时间

          存储的都是唯一(不可以重复),无序的数据   

                   HashSet

             HashSet set = new HashSet();

             1.add新增数据

             2.其实是使用了map.put(key,value)

             3.map.put(key,value)决定了key是唯一的

          两个数据内容一致,Hash值肯定一致

          Hash值一致,数据内容不一定相同

          比较步骤:1.比较Hash,

                     2.比较内存地址,

                     3.equals比较内容

        TreeSet  自带排序 树型结构

          只有实现Comparable接口的类才能被排序

        Map  单独的接口

         keySet:所有key的集合

        HashMap 

        //使用for加强 遍历keySet

        Set<String> keySet=map.keySet();

        for (String key : keySet) {

             System.out.print(key+" ");

         }

    //使用Iterator遍历

    Set<String> keySet=map.keySet();

    Iterator<String> iterator = keySet.iterator();//获取迭代器对象

    while(iterator.hasNext()){//证明集合中存在数据

    String key = iterator.next();

    //根据key获取value

    String value=(String) map.get(key);

    System.out.print(key+" "+value+" ");

    }

    //entry   Set<Map.Entry<k.v>> entrySet()

    Set<Entry<String, Object>> entrySet = map.entrySet();
    Iterator<Entry<String, Object>> iterator = entrySet.iterator();
    while(iterator.hasNext()){//证明集合中存在数据
    Entry<String, Object> entry = iterator.next();
    System.out.println(entry.getKey()+"-------"+entry.getValue());
    }

    HashMap与HashTable的区别:

    1.HashMap线程不安全,但是性能高

       HashTable线程安全,但是性能低

    2.HashTable从1.0的版本就开始使用

       HashMap从1.2的版本就开始使用

    3.HashMap底层就是Hash表来实现的  key和value都可以是null

       HashTablekey和value不可以为null   

    Hashtable<String,String> table=new Hashtable<>();
    table.put(null, null);//运行时异常

    所有的集合中都有一个Iterator接口,用来遍历集合中的数据,返回Iterator迭代器

       在Iterator接口中有三个方法:

        1.hasNext()  判断集合中是否存在下一个元素,返回boolean类型

        2.next()     获取集合中的下一个元素

        3.remove()   删除元素

        

        TreeMap

    泛型集合:在创建集合的时候,规定了集合中能存放的数据类型

    List<String> lis=new ArrayList<String>(); 

  • 相关阅读:
    FireDAC的数据库的FDConnect
    Readers and Writers JSON Framework(2)
    JSON Objects Framework(1)
    SQLServer 临时表的使用
    客户重复需要检查CRM客户
    采购订单下推付款申请单获取组织业务关系
    采购订单跨组织生成销售订单,没得选组织的问题
    销售合同缓存问题
    BOS中给基础资料赋值
    辅助属性值列表功能的缺点
  • 原文地址:https://www.cnblogs.com/s10-/p/8073804.html
Copyright © 2011-2022 走看看