美文网首页
数据结构

数据结构

作者: 你别催 | 来源:发表于2018-12-20 19:06 被阅读1次

    数组和集合

    -1 数组:
    有固定长度 ,存放统一类型数据

     int[] all = {1,2,3};
    

    -2 集合
    大小可动态扩展,可以存储各种类型的数据

    ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("tian");
            arrayList.add("jian");
    

    开发常用集合

    (1)ArrayList
    可动态添加元素,移除元素
    1.添加元素时.其他元素位置不变,会申请开辟一块内存空间和一个新索引,将元素添加进去.
    2.在插入元素时,会申请开辟一块内存空间和一个新索引,新元素会插入到指定索引位置.然后索引之后所有元素都向后移动.删除同理.所以很浪费时间。
    所以该实现只是适用于随机访问元素或者遍历元素,因为他的底层是由数组来实现的.不建议频繁进行插入和删除操作
    不建议在多线程中操作ArrayList,它是不安全线程

        ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("tian");
            arrayList.add("jian");
            arrayList.remove(1);
    

    (2)LinkedList 双向链表
    双向链表:就向5个人手拉手围成一个圈,成员只知道自己的左右是谁.直接上图说不清楚

    Selection_037.png
    需要插入一个成员时,直接找到要插入节点的位置,插入数据.删除同理.
    优化:双向链表长度的1/2,则从前向后查找; 否则,从后向前查找。
    LinkedList的链式线性表的优点: 适合于在链表中间需要频繁进行插入和删除操作。
    LinkedList的链式线性表的缺点: 随机访问速度较慢。查找一个元素需要从头开始一个一个的找

    List,Set,Map的区别

    (1)List 列表
    元素以线性方式存储,可以存放重复对象
    ArrayList,LinkedList.
    (2)Set集合
    Set中的对象不按特定方式排序,并且没有重复对象.
    HashSet: 不能重复存储equals相同的数据.无序

     HashSet hashSet = new HashSet();
            hashSet.add(4);
            hashSet.add(3);
            hashSet.add(2);
            hashSet.add(1);
            hashSet.add(3);
            hashSet.size();
            Iterator iter = hashSet.iterator();
            for (int i = 0; hashSet.size() > i; i++) {
                Log.i("HashSet", "" + iter.next());
            }
    
    I/HashSet: 4
    I/HashSet: 1
    I/HashSet: 2
    I/HashSet: 3
    
    

    TreeSet :它可以保证对象元素唯一,存取无序,线程不安全,效率高,同时还可以对存放在其中的对象进行排序,默认时integer类型。

    public class CompareString implements Comparator<String> {
    
        @Override
        public int compare(String o1, String o2) {
            int i = o1.length() - o2.length();
            return i == 0 ? o1.compareTo(o2) : i;
        }
    }
    
     TreeSet treeSet = new TreeSet<>(new CompareString());
            treeSet.add("2");
            treeSet.add("1123");
            treeSet.add("122667");
            treeSet.add("4s");
            treeSet.add("12532");
            treeSet.add("5wr");
            treeSet.add("22345667");
            Log.i("TreeSet", "" + treeSet);
    
    I/TreeSet: [2, 4s, 5wr, 1123, 12532, 122667, 22345667]
    

    (3)Map映射
    HashMap是一种把键对象和值对象映射的集合,每一个元素都包含一个键对象和值对象.
    HashMap最多只允许一条记录的键key为null.

      HashMap map = new HashMap();
            map.put("",0);
            map.put("1","1");
            map.put("2",2);
            map.put("3",3);
    

    onActivityResult

    从主Aactvity到子Bactiviy,在B获取到数据,结束B,回到A把拿到数据
    1.startActivityForResult(Intent intent, int requestCode);

    //MainActivity
    Intent intent = new Intent(MainActivity.this, BActivity.class);
                    startActivityForResult(intent, 2);
    

    A启动B时调用,requestCode 记录.从那个activity跳转的;
    2.setResult(int resultCode, Intent data)
    在B页面完成操作后结束前调用

      //BActivity
      Intent intent = new Intent(BActivity.this, MainActivity.class);
                    intent.putExtra("zs","ls123");
                    BActivity.this.setResult(22,intent);
                    finish();
    

    resultCode,记录子页返回的
    3.onActivityResult(int requestCode, int resultCode, Intent data)
    在主Aactivity 重写onActivityResult 重写

     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Log.i("MainActivity","requestCode*********"+requestCode);
            Log.i("MainActivity","resultCode----------------"+resultCode);
            Log.i("MainActivity","intent ====== \n"+data.getStringExtra("zs"));
        }
    
     I/MainActivity: requestCode*********2
     I/MainActivity: resultCode----------------22
     I/MainActivity: intent ======  ls123
    
    

    相关文章

      网友评论

          本文标题:数据结构

          本文链接:https://www.haomeiwen.com/subject/tksocqtx.html