2021-10-08 Java与C++的比较笔记

内容介绍

最近在刷LeetCode, 练习Java的同时复习C++。然后发现Java和C++极其容易混淆,比如substring和substr这种。因此,有必要写个笔记方便以后回顾。文章结构将以日期分割。

8 Oct. 2021

字符串截取

C++:substr(起始下标)、substr(起始下标, 子串长度)
参考内容:C++ 中字符串查找、字符串截取、字符串替换

string str = "Morning everyone.";
string sub1 = str.substr(1);
string sub2 = str.substr(1, 3);

Java:substring(起始下标)、substring(起始下标,截止下标)
参考内容:Java截取(提取)子字符串(substring())

String str = "Morning everyone.";
String sub1 = str.substring(1);
String sub2 = str.substring(1, 1+3);

判断是否存在某个元素

C++:find()

string str = "a";
set<string> strSet;
if(strSet.find(str) == strSet.end()){
    strSet.insert(str);
}
vector<string> result;
if(find(result.begin(), result.end(), str) == result.end()){
	result.push_back(str);
}

Java:contains()
参考内容:java 如何判断集合中是否存在某个元素——contains()

String str = "a";
Set<String> strSet = new HashSet();
if(!strSet.contains(str)){
	strSet.add(str);
}
List<String> result = new ArrayList();
if(!result.contains(str)){
	result.add(str);
}

11 Oct. 2021

数组定义

C++定义数组,中括号必须放在变量后面。
参考内容C++数组初始化方法

int nums1[10];
int nums2[] = {1,2};
string strs[] = {"One", "Two"}

Java定义数组,中括号放在前面后面都可以。但不能指定数组长度。
参考内容:java 数组的定义(声明)方法
Java中数组的定义方式

int nums1[]; 
int[] nums2; //推荐使用
int[] nums3 = new int[10]; // 指定数组长度
String[] strs = {"Jan", "Feb", "Mar"};

续行符

当代码一行写不下时,C++可以使用续行符"\"也可以直接换行。

string str = "abcd, \
efgh";
string str[] = {"a", "b",\ // "\"可有可无
				"c", "d"};

而Java没有续行符,直接换行。

String str = "abcd" + 
"efgh";
String str[] {"a", "b",
			  "c","d"};

两个字符串相加

C++两个常量字符串相加会报错,因为“a"和"b"都是const char[]类型,而不是string。
参考资料:为什么标准C++中两个直接字符串常量不能相加

string str = "a“ + ”b"; // 报错
string a = "";
string str1 = a + "a"+"b"; // 正常执行

Java两个常量字符串可以正常相加。

String str = "a“+”b";

13 Oct. 2021

命名空间

C++用namespace来避免命名重复的问题
参考资料:C++的命名空间的使用

#include<iostream>
namespace Zi{
    int result = 123;
}
int main(){
    std::cout<<Zi::result<<std::endl;
    return 0;
}

Java用导入类库的方式解决命名问题
参考资料:Java 命名空间的由来和引入

计算程序执行时间

C++的两种方法:ctime和chrono
参考资料:C++11 std::chrono库详解
C++11 新的计时方法——std::chrono 大法好

#include<iostream>
#include<chrono>
#include<ctime>
using namespace std;
using namespace chrono;

void doThis(){
    for(int i = 0; i<1e6; i++) {
        int a = 1;
    }
}

int main(){
    //  使用chrono库计算时间 (C++ 11)
    //  注:需要使用chrono命名空间;即:using namespace chrono;
    auto start = system_clock::now();
    doThis();
    auto end = system_clock::now();
    auto duration = duration_cast<microseconds>(end - start);
    //  后面是计算比例的,细节在看上面的链接。
    cout<<(double)(duration.count()) * microseconds::period::num / microseconds::period::den <<"s."<<endl;

    //  使用传统的ctime计算时间
    clock_t cstart = clock();
    doThis();
    clock_t cend   = clock();
    cout<<(double)(cend - cstart) / CLOCKS_PER_SEC << "s" << endl;
    return 0;
}

Java计算时间
参考资料:java如何计算程序运行时间

public class test {
    public static void main(String[] args){

        long startTime = System.currentTimeMillis();//获取开始时间
        doThis();
        long endTime = System.currentTimeMillis();  //获取结束时间
        System.out.println((endTime - startTime) + "ms");    //输出程序运行时间
    }
    private static void doThis(){
        for(int i = 0; i<1e6; i++) {
            int a = 1;
        }
    }
}

调用另一个源文件的函数

C++只需要一开始写上函数声明即可。
参考资料:C\C++调用另一个源文件中的函数

Java中如果是static修饰的函数,直接import之后调用;
如果是非静态函数,则需要new一个对象,通过对象调用函数。
参考资料:java中如何调用其他java文件中的方法

原文:第一种方法直接调用,把GetIp.java中的你引用的方法直接改成静态的,然后直接引用的地方引用"包名.类名.方法名"就可以了
还有就是初始化一次,然后直接调用如:T t=new T(); 调用t.method();

20 Oct. 2021

内置排序

C++

#include<algorithm>
#include<vector>
#include<iostream>
using namepace std;
int main(){
//-----------数组排序
	int nums[] = {1,2,3,2,1};
    int len = sizeof(nums)/sizeof(int);
	sort(nums, nums + len);
    for(int i : nums) cout<<i<<' ';
//--------vector排序
	//C++11之后vector可以这样初始化,11之前的会报错
    vector<int> ns = {1,2,3,4,5,6,7,2,1}; 
    sort(ns.begin(), ns.end());
    for(int i : ns) cout<<i<<' ';
   	return 0;
}

Java
参考资料:
1.Java 中使用sort排序
2.Java8排序stream.sorted()

import java.util.Arrays;
import java.util.stream.IntStream; // java8新特性
class streamSort{
	public static void main(String[] args){
// Arrays的sort函数
		int nums[] = {1,2,3,4,1,2,3};
		Arrays.sort(nums);
		for(int i : nums)
			System.out.println(i);
// java8新特性:stream控制
        nums = new int[]{1,2,3,4,1,2,3};
        nums = IntStream.of(nums).sorted().toArray();
		for(int i : nums)
			System.out.println(i);

	}
}

最大最小值

C++
参考资料:c++ 求数组最大最小值函数

#include<iostram>
using namespace std;
int main(){
    int nums[] = {1,2,3,2,1};
    int len = sizeof(nums)/sizeof(int);
    cout<<"maximum value is "<<*max_element(nums, nums+len)<<endl;
    cout<<"minimum value is "<<*min_element(nums, nums+len)<<endl;
    return 0;
}

Java
参考资料:Java8新特性之最小值

import java.util.stream.IntStream;

public class test {
    public static void main(String[] args){
        int nums[] = {1,2,3,4,1,2,3};
        int max = IntStream.of(nums).max().getAsInt();
        int min = IntStream.of(nums).min().getAsInt();
        System.out.println("The maximum value is " + max);
        System.out.println("The minimum value is " + min);
        }
}

24 Oct. 2021

反转列表

C++

#inlucde<algorithm>
#inlucde<vector>

vector<int> a = {1,2,3,4,5,6};
reverse(a.begin(), a.end());

Java

import java.util.*;

List<int> li = Arrays.asList(1,2,3,4,5,6);
Collections.reverse(li);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值