zoukankan      html  css  js  c++  java
  • 几种常见语言的基本语法对比:集合

    public E next(),java 的迭代器的方法 直接是返回元素,和oc的基本一样。oc也是返回对象,而且方法名都直接指出了 obj=[it nextObject],依稀记得c++的迭代器是一个类,提供了 ++的 方法。而其他语言是直接next object。隐藏了移动迭代器的动作。

    c++:

    对比了几个语言,真不想写,也写不来c++,单独之后补上吧。 c++,学之者生,用之者死。

    oc:集合,单单使用是非常简单的,反正也不需要 我们去实现hash或树来设计一个集合容器。

    1.oc的容器固定了,必须装指针,或扁平数据,  也好。不像c++,还可以装对象本身。

    2.for in .这个和其他语言的 for each 一样,其实就是某些实现了迭代或某种链表的数据结构 ,所提供的一个遍历的语法糖。因为不提供索引。如set,是无顺序的,没理由索引,随便插入一个,位置无序变化。所以只提供next功能。一面误解吧。

    //
    //  arraystudy.m
    //  HIWorld
    //
    //  Created by linson on 2018/9/5.
    //  Copyright © 2018年 linson. All rights reserved.
    //
    
    #import "arraystudy.h"
    
    @implementation arraystudy
    
    //可以很清楚的看出和c++ 的不同。 oc的集合。里面的元素就就是对象指针。不会去放一个对象, NSMutableArray<NSString> *mybooks=nil; 这样是编译不过的。
    //oc 的静态函数,写一个+符号就可以。。。莫名喜感。
    //一句话,对比c++ , oc是个好用的语言。
    
    +(void)Showme
    {
        //[self fixarray];
        //[self changenableArray];
        [self studySet2];
        
        //[self studySet];
    }
    
    +(void)studySet2
    {
        NSMutableSet<NSString*> * books=[NSMutableSet new];
        
        //insert
        [books addObject:@"c++"];
        [books addObject:@"c#"];
        [books addObject:@"java"];
        [books addObject:@"banana"];
        
        //delete
        //看到这里就想起c++ 的erase. c++ 的删除,大部分使用删除某个迭代器,那么在 循环中,删除,就要考虑删除的是否是最后一个。为什么不加一个方法呢?
        [books removeObject:@"banana"];
        
        
        for(NSString *mybook in books)
        {
            NSLog(@"%@",mybook);
        }
    }
    
    
    +(void)studySet
    {
        NSArray *books1=@[@"c++",@"java",@"c++",@"c#"];
        
        NSSet<NSString*> *books=[[NSSet alloc]initWithArray:books1];//这里为什么不可以简便初始化呢?也好吧。
        
        //traverse
        NSArray<NSString*>  *arraybooks= [books allObjects];
        for(int i=0;i<[arraybooks count];i++)
        {
            NSLog(@"name:%@",arraybooks[i]);
        }
    
        //enum traverse
        NSEnumerator *it=[books objectEnumerator];
        NSString *obj=nil;
        while ((obj=[it nextObject])!=nil)
        {
            NSLog(@"%@",obj);
        }
        
        //for in.其实就是enum 上面方法的一个语法糖。实现了enum接口色任意集合。那么用一个语法糖来 隐藏 NSEnumerator 实现 travese.
        for(NSString *book in books)
        {
            NSLog(@"traverse book: %@",book);
        }
    }
    
    
    +(void)changenableArray
    {
        //add
        NSMutableArray<NSString *> *books=[NSMutableArray<NSString *> new];
        [books addObject:@"c++"];
        [books addObject:@"java"];
        [books addObject:@"oc"];
        [books addObject:@"orange"];
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"book name:%@",books[i]);
        }
        //modify
        books[2]=@"objective c";
        
        //delete
        [books removeObjectAtIndex:3];
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"2book name:%@",books[i]);
        }
    }
    
    +(void)fixarray
    {
        NSArray<NSString *> *books=@[@"c++",@"java"];//语法有点怪的。@”表示这个数组类型是属于Objective-C类型的。里面的”@”表示字符串属于Oc 的string. 否则就是c,c++的。而且是方括号,不是大括号。
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"name:%@",books[i]);
        }
    }
    
    @end

    c#

    随便写下,最常用的2个。高级语言已经做的非常方便了。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace helloworld
    {
        public abstract class arraystudy
        {
            public static void  ShowMe()
            {
                list();
                dictionary();
            }
    
    
            public static void list()
            {
                List<string> books = new List<string>();
                books.Add("c++");
                books.Add("c#");
                books.Add("java");
    
                foreach(string bookname in books)
                {
                    Console.WriteLine(bookname);
                }
            }
    
            public static void dictionary()
            {
                Dictionary<int, string> books2 = new Dictionary<int, string>();
                //insert
                books2.Add(9, "c++");
                books2.Add(6, "java");
                books2.Add(11, "tea");
    
                books2.Remove(11);
    
                //get
                Console.WriteLine(books2[6]);
    
                //reversa
                foreach (KeyValuePair<int, string> pair in books2)
                {
                    Console.WriteLine(pair.Value);
                }
            }
        }
    }

    java

    和c#基本意思。基本一样。

    //主要掌握主要的集合.和如何遍历他们.基本数组, 可变集合,不重复集合,字典类型    java 是list  set  map.
        public static void Study_Array()
        {
            String[] books={"c#","c++","c","java","oc"};
            for(int i=0;i<books.length;i++)
            {
                System.out.println(books[i]);
            }
            
            //list arraylist .linkedlist
            List<String> booksList=new LinkedList<String>(); //new ArrayList<String>();
            booksList.add("c#");
            booksList.add("c#234");
            booksList.add("c");
            for(int i=0;i<booksList.size();i++)
            {
                System.out.println(booksList.get(i));
            }
            System.out.println("array remove ..............");
            booksList.remove(1);
            for(int i=0;i<booksList.size();i++)
            {
                System.out.println(booksList.get(i));
            }
            
            
            //set treeset hashset.
            Set<String> bookset=new TreeSet<String>();
            bookset.add("c#");
            bookset.add("java");
            bookset.add("c");
            
            
            System.out.println("set ..............");
            //猜测看出,迭代项,第一项是指向第一个元素之前的.而不是c++默认的 beginit;
            Iterator<String> it=bookset.iterator();
            while(it.hasNext())
            {
                System.out.println(it.next());
            }
            
            //恩,熟视无睹,之前看到可枚举,可碟带类型,也没有太在意.一般都是for循环. 其实可碟带的话,就说明,系统可以基于iterator提供一个for each的语法糖给你.
            //而利用普通的for.还 必须先获得某个key的组合,在怎么转换过来 .其实直接用for each吧.用迭代还不如for each .
            System.out.println("set222 ..............");
            for (String mystr : bookset) 
            {
                System.out.println(mystr);
            }
    
            //map 
            System.out.println("map ..............");
            java.util.Map<Integer, String> mymap = new HashMap<Integer, String>(); 
        
            mymap.put(1, "c++");
            mymap.put(2, "c");
            mymap.put(3, "java");
            
            //不推荐使用.毕竟查来查去.才得到结果.
            for(Integer mykey: mymap.keySet())
            {
                System.out.println(mykey);
                System.out.println(mymap.get(mykey));
            }
            
            System.out.println("map loop..............");
            //碟带起,效率高.
            for(Entry<Integer, String> it2 :mymap.entrySet())
            {
                System.out.println(it2.getKey()+":"+it2.getValue());
            }
            
        }
  • 相关阅读:
    27、springboot整合RabbitMQ(1)
    26、springboot与消息
    25、springboot与缓存整合Redis
    24、springboot与缓存(2)
    linux之参数实用讲解
    linux之创建临时文件的方法
    【转】linux之shfit
    linux之stat
    Shell 环境中的输入输出重定向
    Linux下samba的安装与配置
  • 原文地址:https://www.cnblogs.com/lsfv/p/9593505.html
Copyright © 2011-2022 走看看