小编Div*_*ero的帖子

有什么方法可以在线声明一个数组?

假设我有一个方法m(),它将一个字符串数组作为参数.有没有办法在拨打电话时能够在线声明这个数组?即代替:

String[] strs = {"blah", "hey", "yo"};
m(strs);
Run Code Online (Sandbox Code Playgroud)

我可以用一行替换它,并避免声明一个我永远不会使用的命名变量吗?

java arrays

583
推荐指数
6
解决办法
31万
查看次数

价值对的Java集合?(元组?)

我喜欢Java有一个Map,你可以在其中定义地图中每个条目的类型<String, Integer>.

我正在寻找的是一种集合,其中集合中的每个元素都是一对值.对中的每个值都可以有自己的类型(如上面的String和Integer示例),它是在声明时定义的.

该集合将保持其给定的顺序,并且不会将其中一个值视为唯一键(如在地图中).

基本上我希望能够定义类型的ARRAY <String,Integer>或任何其他2种类型.

我意识到我可以创建一个只有2个变量的类,但这看起来过于冗长.

我也意识到我可以使用2D数组,但由于我需要使用不同的类型,我必须使它们成为OBJECT数组,然后我必须一直投射.

我只需要在集合中存储对,所以每个条目只需要两个值.如果没有上课路线,这样的事情会存在吗?谢谢!

java

326
推荐指数
14
解决办法
47万
查看次数

Java:assertEquals(String,String)可靠吗?

我知道==比较两个时有一些问题Strings.这似乎String.equals()是一种更好的方法.好吧,我正在进行JUnit测试,我倾向于使用assertEquals(str1, str2).这是断言两个字符串包含相同内容的可靠方法吗?我会使用assertTrue(str1.equals(str2)),但是你没有得到看到失败的预期和实际值的好处.

在相关的说明中,是否有人有一个页面或线程的链接,明确地解释了问题str1 == str2

java string junit junit4

194
推荐指数
5
解决办法
28万
查看次数

如何等待多个线程完成?

简单地等待所有线程进程完成的方法是什么?例如,假设我有:

public class DoSomethingInAThread implements Runnable{

    public static void main(String[] args) {
        for (int n=0; n<1000; n++) {
            Thread t = new Thread(new DoSomethingInAThread());
            t.start();
        }
        // wait for all threads' run() methods to complete before continuing
    }

    public void run() {
        // do something here
    }


}
Run Code Online (Sandbox Code Playgroud)

我如何改变这一点,以便main()方法在注释处暂停,直到所有线程的run()方法都退出?谢谢!

java parallel-processing multithreading wait

103
推荐指数
8
解决办法
16万
查看次数

Java NIO:IOException:Broken pipe是什么意思?

对于我的一些Java NIO连接,当我有一个SocketChannel.write(ByteBuffer)调用时,它抛出一个IOException:"Broken pipe".

什么原因导致"管道破裂",更重要的是,是否有可能从该状态恢复?如果它无法恢复,似乎这是一个好的迹象,表明发生了不可逆转的问题,我应该简单地关闭这个套接字连接.这是一个合理的假设吗?是否曾经有一段时间,当IOException套接字连接仍然在第一个地方正确连接时(而不是某个时候失败的工作连接)会发生这种情况?

在一个侧面说明,它是明智的做法始终调用SocketChannel.isConnected()在尝试之前SocketChannel.write(),如果是这样,可以同时假设该连接是"破",如果两者都应该被关闭SocketChannel.isConnected(),并SocketChannel.isConnectionPending()false

谢谢!

java nio

89
推荐指数
3
解决办法
14万
查看次数

Java:将字符串转换为ByteBuffer和来自ByteBuffer的字符串以及相关问题

我使用Java NIO进行套接字连接,我的协议是基于文本的,所以我需要能够在将字符串转换为SocketChannel之前将其转换为ByteBuffers,并将传入的ByteBuffers转换回字符串.目前,我正在使用此代码:

public static Charset charset = Charset.forName("UTF-8");
public static CharsetEncoder encoder = charset.newEncoder();
public static CharsetDecoder decoder = charset.newDecoder();

public static ByteBuffer str_to_bb(String msg){
  try{
    return encoder.encode(CharBuffer.wrap(msg));
  }catch(Exception e){e.printStackTrace();}
  return null;
}

public static String bb_to_str(ByteBuffer buffer){
  String data = "";
  try{
    int old_position = buffer.position();
    data = decoder.decode(buffer).toString();
    // reset buffer's position to its original so it is not altered:
    buffer.position(old_position);  
  }catch (Exception e){
    e.printStackTrace();
    return "";
  }
  return data;
}
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效,但我怀疑这是否是执行此转换的每个方向的首选(或最简单)方法,或者是否有其他方法可以尝试.偶尔,和看似随意,调用encode()decode()将抛出一个 java.lang.IllegalStateException: Current …

java string nio bytebuffer character-encoding

79
推荐指数
3
解决办法
13万
查看次数

连接NSString和int的最简单方法

Objective-C中是否有通用功能,我可以插入到我的项目中以简化连接NSStringints?

string cocoa cocoa-touch objective-c nsstring

26
推荐指数
2
解决办法
6万
查看次数

解释使用迭代器时集合的同步?

我知道像Hashtable这样的集合是同步的,但是有人可以向我解释它是如何工作的,以及在什么时候访问仅限于并​​发调用?例如,假设我使用了一些像这样的迭代器:

Hashtable<Integer,Integer> map = new Hashtable<Integer,Integer>();

void dosomething1(){
    for (Iterator<Map.Entry<Integer,Integer>> i = map.entrySet().iterator(); i.hasNext();){
        // do something
    }
}
void dosomething2(){
    for (Iterator<Map.Entry<Integer,Integer>> i = map.entrySet().iterator(); i.hasNext();){
        // do something
        // and remove it
        i.remove();
    }
}
void putsomething(int a, int b){
    map.put(a,b);
}
void removesomething(int a){
    map.remove(a);
}
var clear(){
    map = new Hashtable<Integer,Integer>();
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下我是否有任何陷阱让我从不同的线程中随机调用这些函数?特别是迭代器如何进行同步,特别是在使用entrySet()时,它似乎也需要同步?如果在其中一个循环正在进行时调用clear()会发生什么?如果removedomething()删除了dosomething1()中并发循环尚未处理的项,该怎么办?

谢谢你的帮助!

java collections synchronization

20
推荐指数
1
解决办法
2万
查看次数

Java:NumberFormat的同步问题?

我只使用java.text.NumberFormat将数字转换为更易读的字符串,用逗号分隔数千个等等.基本上我将其定义为:

public static NumberFormat nf = NumberFormat.getInstance(Locale.US);
Run Code Online (Sandbox Code Playgroud)

...然后我在任何线程中调用nf.format(some_number),我想在其中创建一个数字的可读版本.但是看看JavaDoc,它说:"数字格式通常不同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问一个格式,它必须在外部同步."

如果我只使用NumberFormat对象的格式(数字)方法,是否会出现同步问题?我尝试使用NumberFormat.getInstance(Locale.US).format(number),但是每次我觉得可能不需要时,都会产生相关的开销.这真的需要外部同步吗?或者,如果没有NumberFormat,是否有更简单有效的方法来完成同样的事情?

谢谢!

java

19
推荐指数
2
解决办法
1万
查看次数

如何在Log4j中基于时间而不是大小来旋转日志文件?

我使用Log4j RollingFileAppender来创建基于大小的日志轮换.

如何将其配置为在旋转前记录每个文件一段时间

例如,每个日志文件包含一小时的日志,在每小时的顶部旋转?

我使用Properties对象(而不是log4j.properties文件)在Java中以编程方式配置Log4j

java log4j

18
推荐指数
1
解决办法
5万
查看次数